Re: [問題] 面試考題 實作?:運算子
※ 引述《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
11/06 22:46, 1F
→
11/06 22:47, , 2F
11/06 22:47, 2F
→
11/06 22:49, , 3F
11/06 22:49, 3F
→
11/06 22:54, , 4F
11/06 22:54, 4F
→
11/06 22:58, , 5F
11/06 22:58, 5F
推
11/07 09:16, , 6F
11/07 09:16, 6F
討論串 (同標題文章)