2016-01-23 121 views
1

使用64位的C++ Long Long int會限制該程序僅用於執行64位操作系統,還是會在32位操作系統上執行64位的值?C++ Long Long INT - 64位是否僅限於64位操作系統?

我有一個程序,我將一個整數種子傳遞給隨機生成器,並使用種子作爲開始在隨機算法中的位置的關鍵。我用long long int編譯我的代碼,編譯並運行時沒有問題,但是我的系統運行的是Windows 7 64位,我沒有32位系統來測試它。雖然這個程序將主要在我的64位系統上運行,但是這個問題背後的原因是要了解long long int只用於64位OS系統還是32位系統可以通過2來處理64位int或更多的時鐘週期來處理64位與64位操作系統能夠在更少的時鐘週期內處理它?也許我正在比較蘋果與64位int到64位CPU/OS的橙子?認爲如果能夠通過32位CPU/OS來處理它在64位int時可能效率低下?

+0

請分享程序以便更好地理解 –

+0

,以便了解64位類型和操作是如何在32位環境中實現的:http://stackoverflow.com/a/20773254/2805305 – bolov

+0

查看http:///en.cppreference.com/w/cpp/types/整數,當你需要一個必須足夠大以處理特定位數的變量時,最好使用那些'已編號'的int類型。當你只需要一個整數時,你應該使用'普通'int類型,但是在這種情況下唯一的假設是sizeof(int)<= sizeof(long)<= sizeof(long long),注意< =,而不是<。 – user3159253

回答

0

在memmory整數大小獨立於CPU使用的比特量的。因爲處理器總是試圖以最有效的方式運行,所以對於32位處理器,int的默認大小爲32位,因此int的長度可能會有所不同。 使用long long int或uint64(64位無符號整數)類型將保證所有處理器的64位長度。所以記住這一點很好。

1

總之,沒有。使用long long類型不限制您選擇的操作系統。如果您的編譯器支持long long並且以32位操作系統(甚至是16位操作系統)爲目標,那麼編譯器或庫會對如何支持更長類型的細節進行分類。

使用long long類型確實將您限制爲支持此類型的編譯器(和庫),而不管您使用何種操作系統。在C++中,2011標準介紹了它們,但是一些較老的編譯器支持long long類型作爲擴展(例如因爲C從1999年開始)。因此,在2011年標準之前的編譯器可能不支持long long類型。

0

如果您的程序在32位計算機上運行時會出現同樣的情況,您很擔心。你不應該。

如果它編譯爲32位應用程序,它將始終運行相同,它不會使用64位處理器的功能。所以你可能已經猜到了long long對於32位編譯器來說很好,否則你將無法構建你的程序。

如果它編譯爲64位應用程序,它將根本無法在32位機器上運行。

+0

所以如果我正在使用32位IDE並在64位操作系統上運行,IDE是32位控制的,與它編譯的內容始終是32位兼容的? –

+0

@DaveL IDE無關緊要。當你編譯一個程序時,你需要指定它是32位還是64位。從項目指定的命令行運行編譯器作爲參數時,IDE將在項目設置中爲它提供一個選項。總是有一些默認設置,這取決於編譯器。 Visual Studio IDE是32位的,但您可以使用它編譯32位和64位程序。 – kamilk

+0

很感謝澄清。 =)我使用Bloodshed Dev C++ 4.9.9.2,當我回到家時,我將不得不四處徘徊,看看選項在哪裏。 –

-1

long long int不保證是一個64位整數。至少不被C++標準:

3.9.1基本類型[basic.fundamental]

... 

2有五種標準符號整數類型:「符號字符」,「短整型」, 「int」,「long int」和「long long int」。在這個列表中,每個類型至少提供與 列表中的那些相同的存儲。也可能有實現定義的擴展簽名 整數類型。標準和擴展的有符號整數類型是 ,統稱爲有符號整數類型。普通整數具有執行環境的體系結構建議的自然大小 ; 提供其他有符號整數類型以滿足特殊需求。

換句話說,唯一的保證是long long int至少與long int一樣大。而已。

現在,在大多數現代執行環境中,long long int是64位值,即使在本機32位硬件平臺上也是如此。

但是,就C++標準而言,您無論如何都不能保證。因此,您可能會發現在特定的32位平臺上,long intlong long int都是32位整數值。這將完全符合C++標準。

+0

'long long int'必須至少64位大小。 – interjay

+0

你對此有何評論? C++標準看起來很清楚。 –

+0

一些最小的Google提供了很多來源,其中一些引用了標準:http://stackoverflow.com/questions/589575/what-does-the-c-standard-the-size-of-int-long-type to-be http://en.cppreference.com/w/cpp/language/types https://en.wikipedia.org/wiki/C_data_types – interjay

0

不,它完全依賴於操作系統和正在使用的編譯器使用的數據模型。在自C99以來的C++中,long long int的大小是64位。事實上,大多數Linux/Unix實現定義爲64位類型,但在Windows中只有32位,因爲它們使用不同的數據模型。看看給出64 bit computing與模型有關。

0

編輯:long long int總是存在於C++ 11實現中,它至少有64位,因爲5.2.4.2.1(不是C++標準)中的要求它(通過定義最小值LLONG_MAX)。這意味着你應該沒問題。在32位系統上,庫可能會變慢或不可用。

相關問題