好奇怪这个为什么输出的是-1呀

#include <stdio.h>
int main() {
printf("%d\n", -1 >> 1);
return 0;
}
这个为什么输出的是-1呀

负数右移时高位补一

C语言中两个大于号>>是右移位操作,就是把一个数的二进制形式的最右几位丢弃,最前面补原来最高位的数字。

-1的补码为全一,右移一位,高位任然补1,移位完后任然是全一,即-1。