最近,我读了一些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?
答案 0 :(得分:1)
您在printf()
电话中缺少格式字符串。请注意,printf
与print
的工作方式不同。我假设您看到awk解释器的一些随机的不稳定行为。
另一个典型的awk问题是它通常使用双精度浮点数来表示所有数值(也是整数),因此当你接近64位时,你会失去精度并获得奇怪的伪像。这取决于实际的awk实现。
你可能会看到这两个问题的混合物。我承认四舍五入是奇怪的。