首页  >  文章  >  后端开发  >  为什么 Go 和 C 中的 -1 %x 格式输出不同的十六进制表示?

为什么 Go 和 C 中的 -1 %x 格式输出不同的十六进制表示?

Barbara Streisand
Barbara Streisand原创
2024-11-19 12:07:03649浏览

Why Does `%x` Formatting Output Different Hexadecimal Representations for -1 in Go and C?

理解 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn