python存储负数和C++的一些区别

先看些例子: 

a = bin(-3)
print(a)
 
a = bin(3)
print(a)
 
b = bin(-3 & 0xffffffff)
print(b)
 
c = bin(0xfffffffd)
print(c)
 
# 输出
# -0b11
# 0b11
# 0b11111111111111111111111111111101
# 0b11111111111111111111111111111101

所以说:

  • Python 中的整型是补码形式存储的
  • Python 中 bin 一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号方便查看(方便个鬼啊)
  • Python 中 bin 一个负数(十六进制表示),输出的是对应的二进制表示。(注意此时)

这就出现了在Python里面需要将负数和0xffffffff进行与操作,来去掉负数前面的负号,可以理解为超过32位的东西就不进行考虑了,这进行与操作的具体步骤是:如果是正数,直接与;如果是负数,先去掉最前面的负号,再取反,再加1,再进行与操作。从而得到负数的补码。(可以用上面的-3-->-0b11-->0xff ff ff fd)

注意:

所以你为了获得负数(十进制表示)的补码,需要手动将其和十六进制数 0xfffffffd 进行按位与操作,得到结果也是个十六进制数,再交给 bin() 进行输出,得到的才是你想要的补码表示。

这与我们学计算机组成原理的的似乎有些不太一样,确实是这样的,这个对外行看了可能觉得比较好

但是对于计算机专业的人看了,反而会觉得很奇怪


C++和java语言中怎么存负数:

正数的原码,补码,反码都是一样的

负数则是符号位(一般是最高位)不变,剩余的位全部取反,最后在加1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值