当使用“%x”格式说明符打印整数值 -1 时,Go 和 C 的行为不同。在 Go 中,输出为“-1”,而在 C 中,输出为“ffffffffffffffff”,正如预期的那样。
Go 的行为
Go 考虑“%x” " 格式说明符以十六进制表示法表示数字的值,无论它是否为负数。因此,对于 -1,十六进制值为“-ff”。
C 的行为
相反,C 使用“%x”打印整数的内存表示说明符。由于 -1 通常以 2 的补码形式存储,因此它在内存中的十六进制表示为“ffffffffffffffff”。
通过类型转换统一行为
实现类似 C 的行为在 Go 中,在应用“%x”格式说明符之前,必须显式地将有符号整数转换为其无符号整数。例如:
i := -1 // type int fmt.Printf("%x", uint(i)) // prints "fffffffffffffff"
Go 默认行为的基本原理
Go 开发者 Rob Pike 解释了 Go 默认行为背后的原因:
"为什么这不是默认的[无符号格式]?因为如果是的话,就无法将某些内容打印为负数,这正如你所看到的,这是一个更短的表示。”
以上是为什么在使用“%x”时,Go 将负整数打印为“-ff”,而 C 则打印“ffffffffffffffff”?的详细内容。更多信息请关注PHP中文网其他相关文章!