Python 对负数的存储方式和 c++/c/java 的不同点

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

1、在 python 里面,负数的存储方式 实例

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 一个负数(十六进制表示),输出的是对应的二进制表示。

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

2、但是在c/c++/java里面负数都是以补码的形式进行存储的,《计算机原理》显示,计算机内部采用2的补码(Two’s Complement)表示负数。

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

因此对于输出的a我们也要进行截断,但是不能简单粗暴地直接&0xffffffff, 因为这样做的话-1加1是对了,结果是正数的也没问题,但是如果本来结果是负数的,这样就又出奇怪结果了。最后真正的解决方案如下:

实例

def getSum(a,b):
    while b!=0:
        ta = a
        a = a^b
        b = ((ta&b)>31
    if hibit==1:
        return -(((~a)+1)&0xffffffff)
    else:
        return a&0xffffffff

其原理是先通过第32位符号位判断是否负数,是负数则先去反加1再截断,最后加上负号;正数则直接截断。结果号称简洁,容易的Python版本变成了这样,太奇葩了。

4、所以可以查看自己的写的剑指Offer的:二进制中1的个数的求解。对于c++程序和python程序的区别(负数补码的区别)。

而且在这道题目里面,还要注意和1相减进行与操作的计算方式求解个数

5、求解二进制中1的个数,用python写,就是这样的

实例

class Solution:
   def NumberOf1(self, n):
       # write code here
       if n#这个是python里面的,python和别的语言存储负数的格式有点区别
       temp=0x00000001
       count=0
       for i in range(64):
           if n&temp:
               count=count+1
           temp=tempreturn count

6、(另一个题,但是也是按位操作)二进制(64位)中有且只有1个1(想要时间复杂度的低的关键),求解这个数字的的第几位是那个1。比如输入8,输出4。

方法1:O(n)的时间复杂度

实例

def search_1(input_n):
   if input_nfor i in range(64):
       if input_n&temp:
           return i+1
       temp=tempreturn 0

方法2:O(logn),主要是使用二分法求解,但是关键的一点是需要判断他的值的大小。其实也可以使用math.log(input_n,2)进行求解(但是这个库函数的时间复杂度就不太清楚了)

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/220488.html<

(0)
管理的头像管理
上一篇2025-04-14 14:31
下一篇 2025-04-14 14:32

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注