2014-03-27 83 views
2

在vim :h Number如何讓vim處理64位int數?

數值32位或64位符號數。

的最大32位/ 64位數字的值:

2^31=2147483648 
2^63=9223372036854775808 

現在,如果我打電話str2nr()在vim:

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


:echo str2nr('112147483648') 
-> 478333952 

,或者直接EVAL表達:

echo 2147483648 + 7777 
-> -2147482871 

所以問題是,vim doc告訴number是32或64位數字。如何讓vim處理64位數字?像2147483648 + 7777 =2147491425

P.S上述試驗是在做:

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

回答

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 
+0

'Linux的LsyHP 3.13.6-1-ARCH#1 SMP PREEMPT週五03月07日22:47 :48 CET 2014 x86_64 GNU/Linux'這是'uname -a'的輸出,它是一個64位的盒子。 – Kent

+0

我做了很多谷歌,但沒有找到您在答案中發佈的帖子。看來我們不能那樣做,因爲布拉姆已經證實了。如果我在插件上工作,如果我更改代碼並編譯特定版本的vim作爲測試/ dev環境,則沒有任何意義。...... – Kent

+0

@Kent作爲64位系統並不保證您的編譯器將使用一個int的64位。我添加了一些代碼,您可以使用它們在系統上進行編譯,以查看編譯器將用於int的多少位。我相信arch使用'gcc'和gcc應該打印它使用32位來表示int。 – FDinoff