假设有一 int 类型的数值为5,那么我们知道它在计算机中表示为:
5转换成二进制是101,不过int类型的数占用4字节(32位)所以前面填了一堆0。
现在想知道-5在计算机中如何表礻?
在计算机中负数求补码的方法以其正值的补码形式表达。
什么叫补码呢这得从原码,反码说起
原码:一个整数,按照绝对值大尛转换成的二进制数称为原码。
反码:将二进制数按位取反所得的新二进制数称为原二进制数的反码。
取反操作指:原为1得0;原为0,得1(1变0; 0变1)
比如:将00 每一位取反,得11
反码是相互的,所以也可称:
补码:反码加1称为补码
也就是说,要得到一个数的补码先得到反码,然后将反码加上1所得数称为补码。
比如:00 的反码是:11
所以,-5 在计算机中表达为:11 转换为十六进制:0xFFFFFFFB。
再举一例我们来看整數-1在计算机中如何表示。
假设这也是一个int类型那么:
1、先取1的原码:00
正数的原码,补码,反码都相同,都等于它本身
负数求补码的方法的补码昰:符号位为1,其余各位求反,末位加1
反码是:符号位为1,其余各位求反,但末位不加1
也就是说,反码末位加上1就是补码
反 除符号位,按位取反
补 除符号位按位取反再加1
在计算机中,数据是以补码的形式存储的:
在n位的机器数中最高位为符号位,该位为零表示为正为1表示为负;
其余n-1位為数值位,各位的值可为0或1
当真值为正时:原码、反码、补码数值位完全相同;
当真值为负时: 原码的数值位保持原样,
反码的数值位是原碼数值位的各位取反
补码则是反码的最低位加一。
如:若机器数是16位:
十进制数 17 的原码、反码与补码均为: 0001
十进制数-17 的原码、反码与补码分別为:0001、1110、1111
十进制负数求补码的方法转为八进制或十六进制时只需将十进制转为二进制的后,再转为相应的就可以