我有下面的代码:为什么-1 >> 1是-1?而1 >> 1是0!
std::cout << (-10 >> 1) << std::endl;
std::cout << (-9 >> 1) << std::endl;
std::cout << (-8 >> 1) << std::endl;
std::cout << (-7 >> 1) << std::endl;
std::cout << (-6 >> 1) << std::endl;
std::cout << (-5 >> 1) << std::endl;
std::cout << (-4 >> 1) << std::endl;
std::cout << (-3 >> 1) << std::endl;
std::cout << (-2 >> 1) << std::endl;
std::cout << (-1 >> 1) << std::endl;
结果是:
-5
-5
-4
-4
-3
-3
-2
-2
-1
-1
但是,为什么?
-1
是1111 1111
(1字节),-1 >>
1必须是:1011 1111
,这是不是-1
或0
! (我知道标志位没有移位)
有人能告诉我这是如何工作的吗?
每一位都被移位,并且在二进制补码中没有明确的符号位。 – jalf 2010-11-30 01:24:38