我有下面的代碼:爲什麼-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