如何使vim处理64位int号?

时间:2014-03-27 13:47:12

标签: vim

在vim :h Number中:

  

A号32或64位有符号数。

max 32 / 64bit number的值:

2^31=2147483648
2^63=9223372036854775808

现在,如果我在vim中调用str2nr()

:echo str2nr('2147483648')
-> -2147483648


:echo str2nr('112147483648')
-> 478333952

或直接评估表达式:

echo 2147483648 + 7777
-> -2147482871

所以问题是,vim doc告诉number是32或64位数。如何使vim处理64位数?比如2147483648 + 7777 =2147491425

上述测试是在以下情况下完成的:

Archlinux 64bit
Vim 7.4.135 (from Arch 64bit repo)

1 个答案:

答案 0 :(得分:3)

根据这个https://groups.google.com/forum/#!topic/vim_dev/2pXdRG7yW0Y。你不能。

Bram说数字是int,如果你的平台将int声明为64位,你将在vim中使用64位int。但是int被选择为32位(由编译器),所以你只得到一个数字的32位。

:h limits我找到以下内容。

Range of a Number variable:  -2147483648 to 2147483647 (might be more on 64
                           bit systems) 

可能更多可能会告诉您这些限制在64位平台上可能仍然相同。这完全取决于编译器。

我认为唯一可以改变这种情况的方法是,如果您要查看所有源代码并更改内部表示数字的方式,或者找到代表int为64位的编译器。 (我不知道有哪一个)

如果要查找编译器将代表int的位数,可以运行以下代码。

#include "limits.h"
#include "stdio.h"
int main() {
    printf("sizeof int in bits %lu\n", sizeof(int) * CHAR_BIT);
}

在我的64位机器上打印(我怀疑你的机器也会这样做)

sizeof int in bits 32