为什么八进制减法会得到奇怪的结果?

编程语言 2026-07-11

为什么Windows计算器的程序员模式会把 2 - 3 显示成八进制的 1

(数字“1 777 777 777 777 777 777 777”很可能与方程无关,可以忽略。)

我在研究汇编语言中的进制转换,这个结果让人意外。

十六进制和二进制的表示方法可以通过 What is “two's complement”? 解释,但八进制的情况并非如此。

解决方案

你看到的是 two's-complement 正在起作用。请注意,你处于QWORD的 64位模式,因此 -1等于2^64-1,在二进制中表示为64个 1。这个值在十六进制下恰好用16个 F表示,因为每个十六进制位表示4 个二进制位,且4 能整除64。八进制就不是这样了,因为每个八进制位表示3 个二进制位,无法整除64(以及Windows计算器中的其他模式:32位 DWORD的 2^32-1、16位 WORD的 2^16-1、8位 BYTE的 2^8-1),但它仍然表示与其他表示法完全相同的数值。

不过,在所有进制下,你仍然可以通过八进制表示快速看出这个值。例如在QWORD(64位模式)中,它是以1 开头,后面跟着21个 7。由于每个八进制位代表3 个二进制位,总共有63位二进制位;如果在该数值上再加1,就会变成以2 开头、后面跟着21个 0的表示,2 × 2^63等于2^64。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章