2012-08-08 64 views
1

最近,我有16個長讀一些十六進制數據,如0x1000 0000 0000 0000,但awk print long hex overflow?

16架F awk '{printf("0x\n", 0xffffffffffffffff)}',輸出0

打印出一些奇怪的事情,當打印爲0xFFFF FFFF FFFF FFFF

awk '{printf("0x\n", 0x1000000000000000)}' output `0x1000000000000000` ok. 

但是,相反

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

15f的awk '{printf("0x\n", 0xfffffffffffffff0)}',OUTP UT 0

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

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

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

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

13f中awk '{printf("0x\n", 0xfffffffffffff0)}',OUTP UT fffffffffffff0(13F)

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

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

所以圖13F是確定,如何打印16F?

+1

[在awk中打​​印長整數]的可能的重複(http://stackoverflow.com/questions/8857866/printing-long-integers-in-awk) – tripleee 2012-08-08 08:14:51

+0

這打印了很多'0x',所以我想格式字符串剛剛關閉。 – TrueY 2013-04-21 16:19:31

回答

1

你缺少在printf()調用格式字符串。請注意,printf的工作方式與print不同。我假設你看到awk解釋器的一些隨機的不規則行爲。

另一個典型awk的問題是,它通常使用雙精度浮點數來表示所有的數字值(也整數),所以你將失去精度和得到奇怪的文物,當你接近64位。這取決於實際的awk實現。

你可能看到的這兩個問題的混合物。我承認四捨五入是奇怪的。