⼆进制取反运算
总结⼀下,有点疑惑。两个负数的补码相加
⽬录
1、关于⼆进制表⽰
这⾥有⼏个概念,关于原码、补码和反码
补码:在计算机系统中,数值⼀律⽤补码来表⽰(存储)
(正数的补码是其原码。例如⼗进制数8,其⼆进制原码表⽰为00001000,则其补码即为0000 1000。最⾼位是符号位,这
⾥0000 1000标红的0是符号位,0表⽰是正数,如果是1的话就表⽰负数,例如1000 1000就表⽰-8。)
不知道⼤家有没有疑惑128明明可以表⽰为10000000,但是这样的话最⾼位就是符号位了呀。。。。。。那10000000不是应该表⽰⼀个负数吗?其实是我⾃⼰理解错了,来解释⼀下,⾸先128是⼀个整数,⼀个整数有4个字节,⽽⼀个字节有8位。所以128的正确原码应该为00000000 00000000 00000000 1000000
00,只是平常写的时候8位能计算得128,所以也就忽略了⾼位⼆进制。但是我⼜有了⼀个疑惑,可以⽤下⾯⼀句话解答:
8位⼆进制编码带符号数的范围只有-127~+127(补码为-128~+127),所以要表⽰128的话需要9位⼆进制编码。根据这⼀句话我明⽩,应该根据整数的⼤⼩来确定所需字节数,⽽不需要把所有字节列出来。上⾯举例的8,在⼀个字节表⽰的数字范围内,所以可以直接⽤8位⼆进制来表⽰,最⾼位表⽰符号位。
所以理解了数据的⼆进制表⽰,下⾯开始了解。
1、正数补码
正数的就⽐较简单了  反码=补码=原码
2、负数补码
负数就复杂⼀点了
例如(-4)
⾸先(4)的⼆进制为0000 0100
所以(-4)的⼆进制为1000 0100
(-4)的反码(取反):符号为1不变,紧跟着后⾯的每⼀位取反,得1111 1011
(-4)补码:⽤反码加1,⼆进制相加,逢2进1。得1111 1100
3、取反运算
计算机中的运算符取反是怎样计算的呢?
例如0011 1100  表⽰整数60  在计算机中对其执⾏取反动作后结果是是-61,这是什么意思呢?
⾸先我们来取反后得到1100 0011,如果我们单纯的加起来就是195,可是并不是-61呀?
OK,我们知道计算机中是以补码的⽅式存储数据的。所以对取反后的⼆进制码我们需要求出其补码。这时的补码表⽰的才是最后的整数。我们来看⼀下,这⾥1100 0011最⾼位是1,说明这是⼀个负数,那么需要先对这个取反过来的⼆进制再取反,符号位不变,得1011 1100,补码=反码+1,所以再对1011  1100加1,得1011 1101,这时再转化成⼗进制数就是-61了。
上⾯的⽅法⽤来理解为什么是-61就⾏,但是计算的话这⾥还有⼀个快速的办法来求解。
取反后得到的1100 0011表⽰整数195,然后可以直接⽤195-256=-61

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。