为了区分正负,二进制数用最高位来表示符号,1为负,0为正。用8位二进制数举例,0000 0001=1,1000 0001=-1。
十进制中相反数直接在数字前加负号就可,那么二进制的相反数怎么求呢?不管是十进制还是二进制,相反数的意义都是指:该数+该数的相反数=0。比如 0000 0011 + 它的相反数 = 0000 0000 ,那么 0000 0011的相反数=0000 0000 - 0000 0011 = 1111 1101,直观上理解就是一个数的相反数=对该数按位取反再加1。
下面从理论推导一下:对于某个不为0的二进制数来说,该数+它的相反数=0000 0000,那么该结果一定是由于进位溢出造成的(用二进制相加看,不要用十进制看),相当于1111 1111 + 0000 0001 = 0000 0000,用未溢出的值代替0000 0000,即 该数 + 它的相反数=1111 1111 + 0000 0001,--> 它的相反数 = 1111 1111 - 该数 +0000 0001,1111 1111 - 该数 就相当于对该数按位取反,所以二进制数的相反数就是对其按位取反加1。
我们自己理解的话0000 0011=3,它的相反数为-3=1000 0011,但0000 0011 + 1000 0011 != 0000 0000,所以计算机就引入了补码,相当于上面的相反数的表示。将人容易理解的二进制称为原码,计算机实际使用时用的是补码。正数的补码就是自己,负数的补码为按位取反加1。
对于1000 0011来说,若其为原码,则表示-3;若其为补码,则表示(-1)*2^7 + 1*2^1 + 1*2^0 = -125。