[問題] 暨南資工一題C++

看板TransCSI作者 (Tony)時間13年前 (2011/07/05 09:51), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
#include <iostream> int main() { unsigned s=555; int i=(s>>4) & ~(~0<<3); std::cout<<i; system("PAUSE"); return 0; } 我的算法是這樣: unsigned s=555 也就是說二進位是0000001000101011 右移4bit後=0000000000100010 not 0=1 1左移3bit後=00000000000001000 not運算後 =11111111111110111 再 and 00000000000100010 ----------------- 00000000000100010 轉回十進位=34 可是實際輸入電腦後答案是2...我哪裡做錯了嗎? 解答: not 0=1111111111111111 左移3bit=1111111111111000 not後=0000000000000111 and 0000000000100010 ----------------- 0000000000000010 轉成十進位後=2 我果然還太嫩了Orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.89.179

07/05 10:10, , 1F
找到問題了,問題在於我天真的認為not 0=1,實際上是
07/05 10:10, 1F

07/05 10:10, , 2F
1111111111111111
07/05 10:10, 2F
※ 編輯: TonyJih 來自: 61.59.89.179 (07/05 10:14)

07/05 15:13, , 3F
這題型 最近幾年蠻常考的
07/05 15:13, 3F

07/05 15:14, , 4F
加油 我是去年上暨大資工的 希望有緣見面!
07/05 15:14, 4F

07/05 19:22, , 5F
希望有機會當樓上的學弟!
07/05 19:22, 5F

07/06 18:36, , 6F
今天這題果然出現了,幸好有特別去解= =
07/06 18:36, 6F
文章代碼(AID): #1E4cusLj (TransCSI)