awk打印长十六进制溢出?

时间:2012-08-08 07:00:41

标签: awk hex

最近,我读了一些16长度的十六进制数据,比如0x1000 0000 0000 0000,但是当打印0xffff ffff ffff ffff

时打印出一些奇怪的东西
awk '{printf("0x\n", 0x1000000000000000)}'  output `0x1000000000000000`  ok.

但是,而不是

16 f awk '{printf("0x\n", 0xffffffffffffffff)}',输出0

15 f awk '{printf("0x\n", 0xfffffffffffffff)}',输出1000000000000000(14 0)

15 f awk '{printf("0x\n", 0xfffffffffffffff0)}',输出0

14 f awk '{printf("0x\n", 0xffffffffffffff)}',输出100000000000000(13 0)

14 f awk '{printf("0x\n", 0xffffffffffffff0)}',输出100000000000000(14 0)

14 f awk '{printf("0x\n", 0xffffffffffffff00)}',输出0

13 f awk '{printf("0x\n", 0xfffffffffffff)}',输出fffffffffffff(13f)

13 f awk '{printf("0x\n", 0xfffffffffffff0)}',输出fffffffffffff0(13f)

13 f awk '{printf("0x\n", 0xfffffffffffff00)}',输出fffffffffffff00(13f)

13 f awk '{printf("0x\n", 0xfffffffffffff000)}',输出fffffffffffff000(13f)

所以13f还可以,如何打印16f?

1 个答案:

答案 0 :(得分:1)

您在printf()电话中缺少格式字符串。请注意,printfprint的工作方式不同。我假设您看到awk解释器的一些随机的不稳定行为。

另一个典型的awk问题是它通常使用双精度浮点数来表示所有数值(也是整数),因此当你接近64位时,你会失去精度并获得奇怪的伪像。这取决于实际的awk实现。

你可能会看到这两个问题的混合物。我承认四舍五入是奇怪的。