Go 和 C 之间的十六进制打印差异
在 Go 编程语言中,使用 %x 格式打印 64 位整数 -1结果为“-1”。然而,在C语言中,相同的格式对于正整数会输出“ffffffffffffffff”。这种行为一开始可能看起来违反直觉,但它源于 Go 和 C 处理整数表示方式的根本差异。
在 Go 中,整数的 %x 动词使用十六进制表示来表示数字的值。对于像-1这样的负数,其十六进制表示为“-ff”。这遵循始终根据类型显式格式化的 Go 约定。要将有符号整数打印为无符号值,必须显式转换它。
例如:
i := -1 // type int fmt.Printf("%x", i) // prints "-1" fmt.Printf("%x", uint(i)) // prints "ffffffffffffffff"
此行为确保不同类型之间的表示一致。
Rob Pike 解释了负数默认行为背后的原因:
“因为如果是这样,就无法将某些内容打印为负数,正如您所看到的,负数的表示形式要短得多。 “
这意味着 Go 优先考虑其格式约定的简洁性和清晰度。虽然遇到带符号的十六进制数字可能是意想不到的,但它与 Go 对显式性和类型安全的强调是一致的。
以上是为什么 Go 将 -1 打印为十六进制格式的'-1”,而 C 打印'ffffffffffffffff”?的详细内容。更多信息请关注PHP中文网其他相关文章!