python--基础知识点--90--负数存储

在这里插入图片描述

print(hex(2))
print(hex(-2))
print('*' * 30)
# python对数据的存储也是使用补码,与c不同的是一个数值占用的字节数是不确定的

a = -2 & 0xffffffff  # a为-2的补码,从python存储的-2的补码中只截取低位的32位表示-2的32位补码
print(a)  # 4294967295
print(hex(a))  # 0xfffffffe
b = ~(a ^ 0xffffffff)  # 将-2的32位补码转换为python存储-2的补码形式。整个过程相当于低32位不变,高位全部变换位1
print(b)
print(hex(b))

补充:补码
要手动获取一个负数的补码,你需要先知道这个负数在二进制下的原码表示,然后按照补码的定义来求得它的补码。负数的原码表示通常是将正数的原码符号位(最高位)变为1。

以下是一个手动获取负数补码的步骤:

  • 找到正数的原码:首先,找到这个负数对应的正数的二进制原码表示。
  • 转换为负数的原码:将正数的原码的最高位(符号位)设为1,其余位保持不变,得到负数的原码。
  • 求反:对负数的原码每一位取反,即0变为1,1变为0。
  • 加1:在取反后的结果上加1。

举个例子,假设我们要找到-85的补码(假设我们使用的是8位二进制数):

  • 找到正数的原码:85的二进制原码是 01010101。
  • 转换为负数的原码:将最高位设为1,得到负数的原码 11010101。
  • 求反:对每一位取反,得到 00101010。
  • 加1:在 00101010 上加1,得到 -85 的补码 00101011。

注意,这里的结果 00101011 是以8位二进制数表示的-85的补码。在实际的计算机系统中,负数的补码表示通常会利用其符号位(最高位)来表示负数,所以完整的补码表示会包含这个符号位。

另一个重要的点是,由于计算机通常使用固定长度的二进制位来表示整数(如8位、16位、32位或64位),因此在计算补码时,如果最高位发生进位,它会被忽略(因为超出了表示的范围)。这在手动计算时需要特别注意。

在计算机中,补码表示法允许使用相同的硬件和操作来执行加法和减法,因为减去一个数等同于加上这个数的补码。这是补码表示法的一个重要优点。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值