请帮助我理解printf
awk 中的逻辑。例如,-1 的 do 格式化输出 via %u
。
$ gawk --bignum 'BEGIN {printf "%u\n", -1}'
> 18446744073709551615
结果是通过区间 (0; 2^64 - 1) 的转换。我得出结论,无符号的整数值是在这个区间中定义的。因此,对于
$ gawk --bignum 'BEGIN {printf "%u\n", -9223372036854775808}'
> 9223372036854775808
一切正常。但是一旦我们跨过 2 ^ 63,一切都“崩溃”了
$ gawk --bignum 'BEGIN {printf "%u\n", -9223372036854775809}'
> -9.22337e+18
那些。%u
停止工作,显示数字本身。虽然,看起来,价值应该落入区间(0; 2^64 - 1)
。为什么会这样?