首页  >  文章  >  后端开发  >  为什么在使用“%x”时,Go 将负整数打印为“-ff”,而 C 则打印“ffffffffffffffff”?

为什么在使用“%x”时,Go 将负整数打印为“-ff”,而 C 则打印“ffffffffffffffff”?

Susan Sarandon
Susan Sarandon原创
2024-11-18 09:41:02953浏览

Why Does Go Print Negative Integers as

在 Go 与 C 中打印负十六进制整数

当使用“%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中文网其他相关文章!

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