Reputation: 217
For GCC 32 bits, -1 >> 1 returns me FFFFFFFF, but I thought after 2's complement, I will get 0111 1111 ... 1111 which should be 7fff ffff. did i miss something?
Upvotes: 3
Views: 151
Reputation: 75585
Under most implementations, that operator does an arithmetic shift
for signed types, so it preserves the sign
bit (which is the leftmost bit), in this case 1
.
As @Clifford correctly pointed out, the language standard leaves the implementation of >>
up to the implementor.
See the Wikipedia article for details.
Upvotes: 10
Reputation: 15121
For E1 >> E2
, if E1
is negative, then the behavior is implementation-defined, which means different compilers could use different strategies to implement it.
Apparently GCC choose arithmetic shift, as pointed out by @merlin2011
Upvotes: 2