位运算符计算中的原码,反码,补码

1.原码,反码,补码

今天呢,刚开始学习python的一些基础知识,在位运算符中,通常使用以下几个符号:& | ^ << >>,其中涉及到了原码,反码,补码的理解。下面简单介绍一下&,<<

原码:正数的原码就是本身的二进制码,比如5,原码就是0101,而负数的话要在首位也就是符号位变成1,表示负数,即 -5 的原码为1101。
反码:即首位符号位不变,其余位数0变成1,1变成0,如5的原码为0101,反码即为0010,-5的反码为1010。
补码:补码的产生是由于负数表示和计算的需要,正数的补码是本身的原码,但是负数的补码则是反码加1,例如-5,原码为1101,反码为1010,补码为1011。

验证:将5的原码与-5的补码相加结果应为0
0101+1011=10000,这里可以看到溢出了一位,结果我们只取后四位。

所有的运算,都使用补码进行运算,因为原码的补码就是本身,负数就要转换成补码进行运算。计算机底层存储数据的时候都是使用补码存储。(二进制变成中的表示方法,前面加上0b,例:1的二进制表示赋值给a,a=0b0001)

运算符&,两个都为一时取1,否则为0,例0001&0101=0001

a = -5  #原码1101 反码1010 补码1011,负数使用补码运算
b = 4   #原码0100,正数使用原码运算
print(a&b)  #1011&0100=0000
print(a+b)  #1011+0100=1111(首位1表示符号为负)

运算符 <<:

<<  相当于乘法,每移动一位,相当于*2
-4<<1
#-4的原码 100000100  反码11111011  补码11111100 (不是所有的数原码和补码一样)
#左位移1位为11111000--补码   10001000--原码   -8
#原码--补码  转换成反码+1
#补码--原码  转换成反码+1

-4<<2   #向左移动两位
#左移动2位为11110000--补码,原码为补码转换成反码+1,原码为10010000,首位为符号位,结果为-16

运算符 >>:类比运算符<<,向右移动,每移动一位,相当于除以2,如果不能整除,则向下取整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值