这么算也得不到啊
res = hex(0xff + 6 + 3 + 1)
res1 = ~int(res, 16) + 1
print(res1) # -265
要理解这个问题,我们首先需要认识到你正在处理的是一个32位或64位整数(取决于你的Python解释器和操作系统)的按位取反操作。在Python中,整数通常是可变的,但在进行位运算时,它们会表现得像固定大小的整数(通常是32位或64位,取决于系统和Python版本)。
你的目标是找到一个整数ff + 6 + 3 + 1
的取反值等于FFFF FFFF FFFF FEF7
(在十六进制中)。但是,你当前的计算方式没有考虑到整数在内存中的表示(特别是符号位和填充的零)。
在Python中,0xff
是一个16进制的字面量,它实际上等于十进制的255。当你将这个值与其他整数相加时,结果仍然是一个较小的整数(在这个例子中是265),然后当你对这个较小的整数进行按位取反时,结果是一个非常大的负数(在你的例子中可能是-265
,但这取决于Python如何处理整数的位表示)。
然而,FFFF FFFF FFFF FEF7
是一个32位或64位整数的按位取反表示,这意呀着我们需要一个足够大的数(在这个上下文中,是32位或64位全1减去265
的二进制表示),然后进行取反。
但是,直接计算~265
并不会给我们FFFF FFFF FFFF FEF7
,因为265
的二进制表示(在32位或64位整数中)前面会有很多前导零。为了得到这个结果,我们需要确保我们在操作一个足够大的数(即,所有位都是1,除了最低的有效位之外)。
下面是一个Python代码示例,演示如何计算得到FFFF FFFF FFFF FEF7
:
# 假设我们是在32位系统上操作
# 首先,我们创建一个32位全1的数(即-1,因为在二进制中,-1用全1表示)
mask = -1
# 然后,我们从这个数中减去 (ff + 6 + 3 + 1) 的结果
# 注意:这里的 0xff 是十进制的 255
result = ~((0xff + 6 + 3 + 1) & 0xFFFFFFFF) # 使用 & 0xFFFFFFFF 来确保是32位操作
# 将结果转换为十六进制并打印
print(hex(result)) # 应该输出 0xfffffffffef7
注意:
& 0xFFFFFFFF
来确保操作是在32位整数上进行的。这在大多数现代Python解释器上可能不是必需的,因为它们已经使用大整数,但这是一个好习惯,特别是当你不确定你的代码将在什么环境下运行时。0x
前缀,这是Python表示十六进制数的方式。如果你在一个64位系统上,并且想要明确地处理64位整数,你可以使用更大的掩码(如0xFFFFFFFFFFFFFFFF
)或简单地省略掩码操作,因为Python的大整数会自动处理。但是,由于你的目标值是32位的,所以使用32位掩码是更明确的做法。
在继续下去之前,我意识到一个人永远不应该这样做。这个问题纯粹是出于教育目的;我进行这个练习是为了更好地理解python的内部结构、ctype以及它们是如何工作的。 我知道在python中改变整数的值相对容易。事实上,你可以通过扰乱内部来做很多事情。从C API参考, 当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只会返回对现有对象的引用。所以应该
问题内容: 为什么在Python中等于?它不应该像那样抛出异常吗? 问题答案: Wikipedia对历史进行了有趣的报道,并对以下内容的价值有不同的看法: 至少从19世纪初期开始,辩论一直在进行。当时,大多数数学家都同意,直到1821年,柯西(Cauchy)以及诸如未定义形式的表格之类的表达式才被列出。在1830年代,利比里(Libri)发表了令人信服的论点,莫比乌斯(Möbius)站在他身边。
问题内容: 我来自ac风格语言,因此我很自然地使用不相等的语言,但是当我使用Python时,从我阅读的文档中我了解到为此目的使用了运算符。 最近,我看到了很多使用的代码,所以我的问题是,其中之一比其他的更受青睐,还是其中之一被弃用了。 另外,我想知道它们之间是否有任何区别。 问题答案: 蟒2只支持 两个 ,在Python 3的操作者已被删除。 两者之间没有区别,但是是首选形式。
【名称】蔚来高性能计算日常实习 1 2 3面 【时间】23.07 【公司】蔚来 【岗位】高性能计算 【面经】个人 一面: 1. 自我介绍 2. 深挖实习 3. 你用过TensorRT 讲讲对 TensorRT的理解 4. 讲讲TensorRT 和 OpenVINO的区别 C++ 八股: 5. C++面向对象特性 面向对象特性分别如何体现的 6. 讲一下继承 7. 讲一下虚函数 8. 讲一下vect
问题内容: 我注意到我可以使用运算符比较所有本机数据类型(整数,字符串,布尔值,浮点数等),还可以比较包含本机数据类型的列表,元组,集合和字典。在这些情况下,操作员将检查两个对象是否相等。但是在某些其他情况下(试图比较我创建的类的实例),该运算符只是检查两个变量是否引用同一对象(因此在这些情况下,该运算符等效于该运算符) 我的问题是:什么时候操作员不只是比较身份? 编辑:我正在使用Python 3
在EGit 2.3中,他们根据发布文档添加了无快进合并功能 "支持git merge - no-ff作为EGit首选项." http://wiki.eclipse.org/EGit/New_and_Noteworthy/2.3 我的问题是,你在哪里设置这个偏好?我试过偏好-