作者TonyJih (Tony)
看板TransCSI
標題[問題] 暨南資工一題C++
時間Tue Jul 5 09:51:48 2011
#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