题目描述:
求 1^(1<<31>>31)的值
三码知识点
正数 | 负数 | |
---|---|---|
原码 | 引入符号位,正数为0 | 引入符号位,负数为1 |
反码 | 反码==原码 | 符号位不变其他位取反 |
补码 | 补码==原码 | 反码加一 |
1默认位int
类型,以32位存储,二进制如下
00000000 00000000 00000000 00000001
1<<31
整体左移31位,右侧补0
10000000 00000000 00000000 00000000
1<<31>>31
整体右移31位,左侧补符号位
11111111 11111111 11111111 11111111
1^(1<<31>>31)
异或运算:相同位0,不同为1
11111111 11111111 11111111 11111110
补码-1,转反码:
11111111 11111111 11111111 11111101
除符号位,其他位取反,转原码:
10000000 00000000 00000000 00000010
最后答案为-2