Python Decimal的内存结构

import ctypes,decimal# for i in range(0x8000000000000000,0x8fffffffffffffff):# d=decimal.Decimal(i)# if i.to_bytes(length=8, byteorder='little')!=ctypes.string_at(id(d)+72,8):breakt=i=s=0x8ac7200000000000sep=0x100000000000while 1: for .
摘要由CSDN通过智能技术生成

在这里插入图片描述
decimal与float的不同,decimal的字面量是字符串,存储是将符号、小数点位置、去掉小数点的十进制整数为架构的。而且虽然数据区存储的十进制还是hex模式,但设计上都符合人的十进制思维,10000000000000000000进入下一区块,区块间是10000000000000000000进制。因为10000000000000000000*10则一个区块盛不下。
一千万万亿

之前并不知道区块进位这一说,所以先是暴力增加,再到优化后的增加。回头想,直接用HxD修改岂不美哉!

而float是以二进制为基础存储的。

import ctypes,decimal

# for i in range(0x8000000000000000,0x8fffffffffffffff):
#     d=decimal.Decimal(i)
#     if i.to_bytes(length=8, byteorder='little')!=ctypes.string_at(id(d)+72,8):break

t=i=s=0x8ac7200000000000
sep=0x100000000000
while 1:
    for i in range(s,0xffffffffffffffff,sep):
        d=decimal.Decimal(i)
        if i.to_bytes(length=8, byteorder='little')!=ctypes.string_at(id(d)+72,8):break
        t=i
    s=t
    if sep==1:break
    sep=int(sep/16)
    print(hex(i))

0x8ac7230489e80000
Out[283]: 10000000000000000000

0x8ac7230489e80000-1
Out[284]: 9999999999999999999

mem.data(decimal.Decimal(9999999999999999999))
ff ff ff ff ff ff ff ff 30 ff ff ff ff ff ff ff
00 00 00 00 00 00 00 00 13 00 00 00 00 00 00 00
01 00 00 00 00 00 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值