第一个同学写的很好,但一开始不太清楚为什么这样计算。 以下是学习笔记。
首先,需要理解有符号整数。 有符号整数的最高有效位表示符号位,0是正数,1是负数。 例如,为了清楚起见,使用8位二进制数。
//十进制=源代码
3=00000011
-3=10000011
然后是反码。 正整数的反符号本身(原符号),负整数的反符号本身的符号位不变,把剩下的各位反过来。
//十进制=原码=反码
3=00000011=00000011
-3=10000011=11111100
最后是补数。 正整数补码是其原始代码。 因此,正整数的原始代码、相反的代码和补码都相同。 负整数的补数是负号加1。
//十进制=原码=反码=补数
3=00000011=00000011=00000011
-3=10000011=11111100=11111101
这些概念我们理解后,反过来就很明白了; 取反是根据补数进行的,要取反运算(n ),必须将整数转换为补数,然后取反,最后转换为原码。 应该注意的是,如果正整数补数反向,则符号位为1,因此该反向数为负整数。 需要像根据负整数计算补数那样进行逆运算得到原符号。 示例:
3=0000011=1111100=1111011=10000100=-4
//1.10进制数转换为补数(00000011 )需要注意正整数的反符号和补数本身
//2 .反转补码(11111100 ) )。
//3 .将已经取反的补码转换为反码(11111011 ),补码转换为反码的公式:反码=补码- 1
//4 .最后将反码的逆运算转换为原始代码(10000100 )。 逆运算的过程是反码的符号位不变,剩下的大家取逆
//5 .此时,结果为-4
反转负整数:
-3=10000011=1111100=1111101=0000010=2
//1.10进制转换为原码(10000011 )
//2 .将原码转换为反码(11111100 )
//3 .反码转换为补数(11111101 )。 公式为补数=反码1
//4 .反码(00000010 )。 此时,反过来的二进制符号位为0,表示它是正整数。 上面正整数的反码和补码本身,所以最终变成2