【问题标题】:awk print long hex overflow?awk 打印长十六进制溢出?
【发布时间】:2014-02-14 22:31:11
【问题描述】:

最近看了一些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)

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

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

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

所以 13f 没问题,如何打印 16f?

【问题讨论】:

标签: awk hex


【解决方案1】:

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

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

您可能会看到这两个问题的混合。我承认四舍五入到 0 很奇怪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多