作业帮 > 数学 > 作业

二进制取补运算 有符号输出

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/10/05 22:35:18
二进制取补运算 有符号输出
int s1 = 10;
s1 = s1;
输出结果为什么是-11?
【书上的解释】
32位整数10的二进制是 00000000 00000000 00000000 00001010
取补后的结果就是 11111111 11111111 11111111 11110101
有符号时最左边的1视为符号,转换为整数是 -11
【疑惑】
最后一句不懂.最左边就是指32位里第一位的1吧?然后怎么算的啊?为啥得到-11?
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.
如果还有疑问,可以找 原码、反码、补码相关的知识看看.