非常奇怪的是,我发现在awk中,大整数看起来只有53位,这是我的示例:
function bits2str(bits,data, mask)
{
if (bits == 0)
return "0"
mask = 1
for (; bits != 0; bits = rshift(bits, 1))
data = (and(bits, mask) ? "1" : "0") data
while ((length(data) % 8) != 0)
data = "0" data
return data
}
BEGIN{
print 32,"\tlshift 48:\t", lshift(32,48), "\t", bits2str(lshift(32,48))
print 429,"\tlshift 48:\t", lshift(429,48), "\t", bits2str(lshift(429,48))
}
输出为:
32 lshift 48: 0 0
429 lshift 48: 3659174697238528 00001101000000000000000000000000000000000000000000000000
但是在c++中,其输出为:
32 lshift 48: 9007199254740992
429 lshift 48: 120752765008871424
比较两个输出后,我发现awk只有53位,
然后我研究了gawk的源代码(从3021行开始,名为buildin.c,gawk 4.1.1,http://ftp.gnu.org/gnu/gawk/),但是我没有发现int的特殊操作。
那么,是什么原因造成的呢?为什么会这样呢?
最佳答案
在AWK中,所有数字都存储在浮点中。
从Bitwise function:
假设使用IEEE-754,则double
只能表示不超过253的整数。
关于c++ - AWK中的大整数只有53位吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24382014/