Pergunta

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?

Foi útil?

Solução

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.

Outras dicas

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top