[問題] 暨南資工一題C++
#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
07/05 10:10, 1F
→
07/05 10:10, , 2F
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