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

看板C_and_CPP作者 (孟)時間13年前 (2011/11/05 09:27), 編輯推噓12(12024)
留言36則, 18人參與, 最新討論串1/3 (看更多)
最近面試遇到一個問題 實作?:運算子 a ? b : c => int cond(int a, int b, int c) 只能用 + - * / ~ ! ^ | & >> << 運算子 不能用if或loop 題目是說一行程式碼可以完成 最多可以define一個8-bits的常數 想請問大家怎麼解 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.37.166

11/05 17:34, , 1F
為啥面試都要考這些東西...Orz
11/05 17:34, 1F

11/05 17:35, , 2F
我只想到檢查 a 是不是為0而已...XD
11/05 17:35, 2F

11/05 17:38, , 3F

11/05 17:43, , 4F
沒說可以用=耶這樣行嗎
11/05 17:43, 4F

11/05 17:45, , 5F
return !!a * b + !a * c這樣?
11/05 17:45, 5F

11/05 17:46, , 6F
http://codepad.org/Grchg6xv 一樣可以, 做線性組合而已
11/05 17:46, 6F

11/05 17:49, , 7F
cool
11/05 17:49, 7F

11/05 17:50, , 8F
! 運算子有保證傳回 1 或 0 嗎?還是任意非零值或 0 ?
11/05 17:50, 8F

11/05 17:51, , 9F
那有沒有可能不用!也不用if只用位元遮來遮去呢@@?
11/05 17:51, 9F

11/05 17:52, , 10F
似乎是他只會回傳boolean
11/05 17:52, 10F

11/05 17:56, , 11F
@stimim ! 只回傳真假, 做乘法時轉rvalue確保true->1 false
11/05 17:56, 11F

11/05 17:56, , 12F
->0
11/05 17:56, 12F

11/05 17:58, , 13F
@j0214ack 用位元遮罩可行, 但較不可攜
11/05 17:58, 13F

11/05 18:22, , 14F
這題無解,?: 具有 short circuit 特性
11/05 18:22, 14F

11/05 18:22, , 15F
b 和 c 只有一個會被 evaluate
11/05 18:22, 15F

11/05 18:22, , 16F
但寫成 function 後兩者都會被 evaluate 才傳入
11/05 18:22, 16F

11/05 18:23, , 17F
所以不管怎麼寫都不可能和 ?: 的行為一致
11/05 18:23, 17F

11/05 18:25, , 18F
"!!"的意思是先變成bool的反相在反相囉
11/05 18:25, 18F

11/05 18:28, , 19F
我想了很久還是不知道要怎麼用遮罩達到一樣的效果QQ
11/05 18:28, 19F

11/05 18:31, , 20F
@littleshan 或許題目中的 a, b 是變數不是敘述
11/05 18:31, 20F

11/05 18:41, , 21F
11/05 18:41, 21F

11/05 21:53, , 22F
我個人覺得這種題目有點病態.....
11/05 21:53, 22F

11/05 22:38, , 23F
無聊的題目
11/05 22:38, 23F

11/05 23:09, , 24F
其實還滿有趣的 ^^
11/05 23:09, 24F

11/05 23:28, , 25F
感謝poyenc大的解答!!
11/05 23:28, 25F

11/05 23:51, , 26F
return a*b+(1^a)*c; 這樣行嗎
11/05 23:51, 26F

11/06 00:04, , 27F
return !!a*b+(1^!!a)*c; 有可能不是1或0
11/06 00:04, 27F

11/06 00:10, , 28F
這樣其實跟上面的一樣了 = =
11/06 00:10, 28F

11/06 01:25, , 29F
長知識, 原來true有做乘法rvalue會轉做1的特性....@_@"
11/06 01:25, 29F

11/06 01:42, , 30F
rvalue轉rvalue才有, 因為掛了 ! 上去了
11/06 01:42, 30F

11/06 02:01, , 31F
不知這樣可不可以... http://codepad.org/Dtm8N36m
11/06 02:01, 31F

11/06 03:39, , 32F
樓上 &&跟||好像沒有在可以用的operators裡面 :p
11/06 03:39, 32F

11/06 11:27, , 33F
return *(&a - !a - 1) , 惡搞 * 和 & operator XD
11/06 11:27, 33F

11/06 11:59, , 34F
大概是要寫韌體的工作
11/06 11:59, 34F

11/06 21:03, , 35F
c ^ ((b ^ c) & (!a - 1))
11/06 21:03, 35F

11/06 21:37, , 36F
能用&為什麼不能用&&.....
11/06 21:37, 36F
文章代碼(AID): #1EjG6Syr (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EjG6Syr (C_and_CPP)