web rocker
web rocker

Reputation: 217

C programme bitwise: value of -1 >> 1

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

Answers (2)

merlin2011
merlin2011

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

Lee Duhem
Lee Duhem

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

Related Questions