簡體   English   中英

32位系統的INT最大大小

[英]INT max size for 32bit system

假設我們正在談論32位系統。

PHP不支持無符號INT。 這意味着INT值應介於-2,147,483,648和2,147,483,647之間。 INT占用4個字節來存儲32位長度的值。

那是否意味着我只有31位的值和1位的符號? 或者我可以使用整個32位來存儲值?

正在使用整個32位。 只是默認輸出函數解釋為有符號整數。 如果要顯示“原始”值,請使用:

printf("%u", -1);    //  %u for unsigned

但是,由於PHP在內部處理帶符號的整數,因此如果您希望它們的行為像無符號的整數,則只能對它們使用位算術,而不能對其進行加法/乘法等。

首先,如果要進行大量計算(例如,規律性大於10k),則應使用bcmath任意精度模塊。

其次,官方的php實現內部使用二進制補碼來表示數字,就像幾乎所有其他編譯器和解釋器一樣。 由於有符號位的 (如果將0視為正[1] )為1,而31位的熵為31,因此可以存儲2 32 = 4 294 967 296個不同的值。 您如何解釋它們取決於您的應用程序。


[1]-0既不是正數也不是負數。

據我所知,在32位系統上,最大可能的正整數是2147483647,上面的值將是浮點值,因為php中的浮點值最多可以取10000000000000。

通常,使用32位整數時,有符號和無符號之間的差異就是您解釋該值的方式。 例如,有符號的和無符號的(-1)+1都將為1,因為有符號是很明顯的,而無符號的則只有在將溢出切斷后才為真。 因此,您確實有32位存儲值,恰好是這樣,所以有1位的解釋與其余部分有所不同。

二進制補碼最常用於存儲數字,這意味着1位不僅僅浪費在符號上。

http://en.wikipedia.org/wiki/Two's_complement

在PHP中,如果某個數字溢出平台的INT_MAX,它將轉換為浮點值。

2147483647是常規值2 ^ 31-1。 1表示符號,-1表示-1,因為我們也表示0。

來自手冊:“整數的大小取決於平台,盡管通常的最大值約為20億(32位帶符號)。64位平台的最大值通常為9E18。支持無符號整數。自PHP 4.4.0和PHP 5.0.5起,整數大小可以使用常量PHP_INT_SIZE確定,最大值可以使用常量PHP_INT_MAX確定。”

是的,如果它將使用無符號整數,那么它將使用32位存儲它,因為在這種情況下您不需要使用符號,但是由於它僅支持有符號整數,因此32位系統將具有31位的值和1位的最大符號s0有符號整數范圍是-2147483648至2147483647。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM