C语言中位操作

2024-11-29 10:42:35
推荐回答(3个)
回答(1):

首先32位系统-3默认为整形占4字节(32个位),二进制表示11111111 11111111 11111111 11111101得来方法:
3的二进制位00000000 00000000 00000000 00000011,取反补1后等到上面的值
再看下-1的二进制11111111 11111111 11111111 11111111同样是1取反后补1
下面看下移位因为第一位为1,右移时根据最高位补位,移1位后值为:
11111111 11111111 11111111 11111110
再移动1位就变成了:11111111 11111111 11111111 11111111后面不管你右移多少次始终是这个结果,所以-3右移2次以上后值就是-1了。

回答(2):

>>是右移运算符,无符号数右移直接补0,带符号数右移,负数补1,整数补0,-3的二进制按8位来看是11111101(3的补码),右移31位,左边空出来的都补上1,结果是11111111,对应的带符号数,不就是-1么。

回答(3):

有人回答了