作者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
1F:→ TonyJih:找到问题了,问题在於我天真的认为not 0=1,实际上是 07/05 10:10
2F:→ TonyJih:1111111111111111 07/05 10:10
※ 编辑: TonyJih 来自: 61.59.89.179 (07/05 10:14)
3F:推 robert6408:这题型 最近几年蛮常考的 07/05 15:13
4F:→ robert6408:加油 我是去年上暨大资工的 希望有缘见面! 07/05 15:14
5F:→ TonyJih:希望有机会当楼上的学弟! 07/05 19:22
6F:→ TonyJih:今天这题果然出现了,幸好有特别去解= = 07/06 18:36