二进制取反运算

总结一下,有点疑惑。

目录

1、关于二进制表示

1、正数补码

2、负数补码

3、取反运算


1、关于二进制表示

这里有几个概念,关于原码、补码和反码

补码:在计算机系统中,数值一律用补码来表示(存储)

(正数的补码是其原码。例如十进制数8,其二进制原码表示为00001000,则其补码即为0000 1000。最高位是符号位,这里0000 1000标红的0是符号位,0表示是正数,如果是1的话就表示负数,例如1000 1000就表示-8。)

不知道大家有没有疑惑128明明可以表示为10000000,但是这样的话最高位就是符号位了呀。。。。。。那10000000不是应该表示一个负数吗?其实是我自己理解错了,来解释一下,首先128是一个整数,一个整数有4个字节,而一个字节有8位。所以128的正确原码应该为00000000 00000000 00000000 100000000,只是平常写的时候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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值