为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 sys.maxint == "7ffffffffffffffff"?

为什么 sys.maxint == "7ffffffffffffffff"?

慕工程0101907 2022-01-11 20:11:36
>>> import sys>>> print '{0:64b}'.format(sys.maxint) 111111111111111111111111111111111111111111111111111111111111111>>> print '{0:16x}'.format(sys.maxint)7fffffffffffffff什么?7 是从哪里来的?这也不符合我对 2 的补码的理解。
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

计算二进制表示中 1 的数量。其中有 63 个。让我们写入 64 位,这样我们就可以看到前导 0:


0111111111111111111111111111111111111111111111111111111111111111

这是最大的 64 位整数:63 个 1 位,第 64 位为 0。如果最左边的位是 1,我们将有-1. 哦亲爱的!当符号位为 1 时,我们得到负数。那不好。64 个 1 实在太多了。


以上,4人一组:


0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111

并以十六进制表示:


0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111

7    f    f    f    f    f    f    f    f    f    f    f    f    f    f    f


查看完整回答
反对 回复 2022-01-11
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

在 2 的补码中,可以用N位表示的最高正数0后跟N-1 1's。将所有N位设置为1产生 的表示-1

所以在 64 位系统上,最大整数是 63 个 1 位。以十六进制表示,7后跟 7 f


查看完整回答
反对 回复 2022-01-11
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

在 64 位表示中,可以表示的最高数是2^63-1,


>>> import sys

>>> sys.maxint

9223372036854775807

>>> hex(9223372036854775807)

'0x7fffffffffffffff'

>>> (2**63)-1

9223372036854775807L

它适用于任何 N 位表示。例如对于 8 位,最大值为2^7-1


>>> hex(127)

'0x7f'

>>> hex(128)

'0x80'


查看完整回答
反对 回复 2022-01-11
  • 3 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号