在lua(5.1.4)下面测试的时候使用0x100000000的时候出现了问题,打印结果很明显,如下所示:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > print(0xffffffff) 4294967295 > print(0x100000000) 4294967295 > print(0x100000001) 4294967295
一个同事给出了答复,但是说是强制转换的原因。不是太明白,按照long long转换成int的形式就是截断,就不会出现上面哪种都是4294967285的结果。5.1.4的源代码关于计算0xffffffff到整形的函数如下所示:
int luaO_str2d (const char *s, lua_Number *result) { char *endptr; *result = lua_str2number(s, &endptr); if (endptr == s) return 0; /* conversion failed */ if (*endptr == 'x' || *endptr == 'X') /* maybe an hexadecimal constant? */ *result = cast_num(strtoul(s, &endptr, 16)); if (*endptr == '