二进制取补运算 有符号输出int s1 = 10;s1 = s1;输出结果为什么是-11?【书上的解释】32位整数10的二进制是 00000000 00000000 00000000 00001010取补后的结果就是 11111111 11111111 11111111 11110101有符号时最
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/06 11:53:01
![二进制取补运算 有符号输出int s1 = 10;s1 = s1;输出结果为什么是-11?【书上的解释】32位整数10的二进制是 00000000 00000000 00000000 00001010取补后的结果就是 11111111 11111111 11111111 11110101有符号时最](/uploads/image/z/682355-11-5.jpg?t=%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8F%96%E8%A1%A5%E8%BF%90%E7%AE%97+%E6%9C%89%E7%AC%A6%E5%8F%B7%E8%BE%93%E5%87%BAint+s1+%3D+10%EF%BC%9Bs1+%3D+s1%EF%BC%9B%E8%BE%93%E5%87%BA%E7%BB%93%E6%9E%9C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%98%AF-11%3F%E3%80%90%E4%B9%A6%E4%B8%8A%E7%9A%84%E8%A7%A3%E9%87%8A%E3%80%9132%E4%BD%8D%E6%95%B4%E6%95%B010%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%98%AF+00000000+00000000+00000000+00001010%E5%8F%96%E8%A1%A5%E5%90%8E%E7%9A%84%E7%BB%93%E6%9E%9C%E5%B0%B1%E6%98%AF+11111111+11111111+11111111+11110101%E6%9C%89%E7%AC%A6%E5%8F%B7%E6%97%B6%E6%9C%80)
二进制取补运算 有符号输出int s1 = 10;s1 = s1;输出结果为什么是-11?【书上的解释】32位整数10的二进制是 00000000 00000000 00000000 00001010取补后的结果就是 11111111 11111111 11111111 11110101有符号时最
二进制取补运算 有符号输出
int s1 = 10;
s1 = s1;
输出结果为什么是-11?
【书上的解释】
32位整数10的二进制是 00000000 00000000 00000000 00001010
取补后的结果就是 11111111 11111111 11111111 11110101
有符号时最左边的1视为符号,转换为整数是 -11
【疑惑】
最后一句不懂.最左边就是指32位里第一位的1吧?然后怎么算的啊?为啥得到-11?
二进制取补运算 有符号输出int s1 = 10;s1 = s1;输出结果为什么是-11?【书上的解释】32位整数10的二进制是 00000000 00000000 00000000 00001010取补后的结果就是 11111111 11111111 11111111 11110101有符号时最
int s1 = 10;
32位整数的二进制为:
00000000 00000000 00000000 00001010
s1 = s1;
按位取反之后为:
11111111 11111111 11111111 11110101
由于是有符号整数(int),并且最高位是1,所以是负数.
负数的真值为补码,即除了符号位以外,每位取反,结果加1:
1、除符号位以外,每位取反:
10000000 00000000 00000000 00001010
2、结果加1:
10000000 00000000 00000000 00001011
所以是-11.
如果还有疑问,可以找 原码、反码、补码相关的知识看看.