二进制取补运算 有符号输出int s1 = 10;s1 = s1;输出结果为什么是-11?【书上的解释】32位整数10的二进制是 00000000 00000000 00000000 00001010取补后的结果就是 11111111 11111111 11111111 11110101有符号时最
来源:学生作业帮助网 编辑:六六作业网 时间:2025/02/09 07:15:07
二进制取补运算 有符号输出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.
如果还有疑问,可以找 原码、反码、补码相关的知识看看.