理解 Go 和 C 中 64 位整数 -1 的十六进制表示
在 Go 和 C 中,%x 格式用于以十六进制表示法打印整数。然而,当应用于负 64 位整数 -1 时,就会出现分歧。
在 Go 中,%x 保留负值,显示“-1”,而 C 输出“ffffffffffffffff”。这种差异源于 Go 严格的类型处理。
要在 Go 中将 -1 的十六进制表示形式打印为无符号整数,需要显式转换。将其转换为 uint 可确保该值被解释为无符号类型:
fmt.Printf("%d %x %d %x", i, i, uint(i), uint(i))
这会产生输出:
-1 -1 4294967295 ffffffff
第二个十六进制值(“ffffffffff”)表示当被视为无符号整数时,2 的补码是 -1。
正如 Rob Pike 所解释的,此行为背后的基本原理是保留以紧凑格式打印负数的能力。如果 %x 格式始终将参数视为无符号,则没有直接的方法来显示负值。
以上是为什么 Go 和 C 中的 -1 %x 格式输出不同的十六进制表示?的详细内容。更多信息请关注PHP中文网其他相关文章!