Re: [問題] 面試考題 實作?:運算子

看板C_and_CPP作者 (拒看低質媒體)時間12年前 (2011/11/06 22:37), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《mongsq (孟)》之銘言: : 最近面試遇到一個問題 : 實作?:運算子 : a ? b : c => int cond(int a, int b, int c) : 只能用 + - * / ~ ! ^ | & >> << 運算子 : 不能用if或loop : 題目是說一行程式碼可以完成 : 最多可以define一個8-bits的常數 : 想請問大家怎麼解 : 謝謝~ 分享個人想法,有誤請指正(我第一次看到這個問題) 我是從bitwise的觀點來看這個問題。 如果把a, b, c當成bit, 那總共有2^3 = 8種組合 a b c Result 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 接下來我想到有人用mask的概念來解釋|, &運算子 其中的& 有種能把bit 濾掉的感覺 所以我就先嘗試 a & b a & c 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 我發現 a & b 的部份在 a = 1 的時候符合 仔細想想原因以後,我就把 a & c 改成 (~a & c) ~a & c 0 0 0 0 1 0 1 0 因為這些都是bitwise operator 所以 (a & b) | ((~a) & c ) 就是答案 不知道這樣是否正確 推文內好像也有類似解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.9.1 ※ 編輯: Wush978 來自: 220.137.9.1 (11/06 22:38) ※ 編輯: Wush978 來自: 220.137.9.1 (11/06 22:45)

11/06 22:46, , 1F
推文有類似概念的解答, 但是你直接用a&b, 假設a為true,
11/06 22:46, 1F

11/06 22:47, , 2F
你return出去的b可能不是原來的b, 因為b不一定== a&b @@
11/06 22:47, 2F

11/06 22:49, , 3F
而且又|了(~a)&c的結果, 恐怕return值是奇怪的結果@_@"
11/06 22:49, 3F

11/06 22:54, , 4F
對吼 我想錯了 a 要先轉成為全0 or 全1 是嗎?
11/06 22:54, 4F

11/06 22:58, , 5F
yap :)
11/06 22:58, 5F

11/07 09:16, , 6F
其實你畫個k-map就解決了
11/07 09:16, 6F
文章代碼(AID): #1Ejfktcl (C_and_CPP)
文章代碼(AID): #1Ejfktcl (C_and_CPP)