看板 TransCSI 關於我們 聯絡資訊
#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
TonyJih:找到問題了,問題在於我天真的認為not 0=1,實際上是 07/05 10:10
TonyJih:1111111111111111 07/05 10:10
※ 編輯: TonyJih 來自: 61.59.89.179 (07/05 10:14)
robert6408:這題型 最近幾年蠻常考的 07/05 15:13
robert6408:加油 我是去年上暨大資工的 希望有緣見面! 07/05 15:14
TonyJih:希望有機會當樓上的學弟! 07/05 19:22
TonyJih:今天這題果然出現了,幸好有特別去解= = 07/06 18:36