为什么c语言中的-1 >> 1的输出值是-1?

-1的补码FFFF, 即1,111 1111 补码右移补符号位, 还是1, 111 1111, 所以还是-1

>>在C语言里表示移位符号,左移,要将十进制整数变为二进制,-1就是11111111,左移1位,因为是负数,所以左边要添上一个1,所以结果还是11111111,转为十进制就是-1了。

补码左移补0, 右移补符号位

原码左移右移都补0

-2是因为1,111 1111左移补0, 变成1, 111 1110, 这是-2的补码

等你学了原码补码反码移码你就懂了