1

32ビットシステムについて話しているとしましょう。

PHP は unsigned INT をサポートしていません。これは、INT 値が -2,147,483,648 と 2,147,483,647 の間の値であることを意味します。また、INT は 32 ビット長の値を格納するために 4 バイトを必要とします。

では、値に 31 ビット、符号に 1 ビットしかないということですか? または、32 ビット全体を使用して値を格納できますか?

4

7 に答える 7

4

32ビット全体を使用しています。デフォルトの出力関数がそれを符号付き整数として解釈するだけです。値「生」を表示する場合は、次を使用します。

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

ただし、PHP は内部で符号付き整数を処理するため、ビット演算のみを使用できますが、加算/乗算などは使用できません (符号なし整数のように動作することが予想される場合)。

于 2012-01-07T16:14:55.430 に答える
1

まず第一に、巨大な数 (たとえば、通常は 10k より大きい) で計算を行いたい場合は、bcmath任意精度モジュールを使用する必要があります。

第二に、公式の php 実装は、事実上他のすべてのコンパイラやインタプリタと同様に、 2 の補数を内部的に使用して数値を表します。符号付きビットのエントロピー(0 を正[1]としてカウントする場合) は 1 であり、31 ビットのエントロピーは 31 であるため、2 32 = 4 294 967 296 個の異なる値を格納できます。それらをどのように解釈するかは、アプリケーション次第です。


[1] - 0 は正でも負でもありません。

于 2012-01-07T16:09:26.167 に答える
1

私の知る限り、32 ビット システムで可能な最大の正の整数は 2147483647 です。php の float 値は 10000000000000 までの値を取ることができるため、上記の値は float 値になります。

于 2012-01-07T16:12:00.023 に答える
0

はい、符号なし整数を使用した場合、その場合は符号が必要ないため、32ビットを使用して格納しますが、符号付き整数のみをサポートするため、32ビットシステムは値に31ビット、符号s0最大に1ビットを持ちます符号付き整数の範囲は -2147483648 ~ 2147483647 です。

于 2012-01-07T16:14:12.660 に答える
0

通常、32 ビット整数では、符号付きと符号なしの違いは、値を解釈する方法だけです。たとえば、(-1)+1 は、符号付きと符号なしの両方で 1 になります。符号付きの場合は明らかであり、符号なしの場合は、オーバーフローを切り取った場合にのみ真になります。したがって、値を格納するために32ビットがありますが、残りのビットとは異なる方法で解釈されるビットが1つあるだけです。

于 2012-01-07T16:08:37.203 に答える
0

2 の補数は、数値を格納するために最も頻繁に使用されます。つまり、符号だけのために 1 ビットが無駄になることはありません。

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

PHP では、数値がプラットフォームの INT_MAX を超えると、浮動小数点値に変換されます。

于 2012-01-07T16:09:45.240 に答える
0

2147483647 は通常の値 2^31-1 です。0 も表すため、符号は 1 ビット、-1 です。

マニュアルから: 「整数のサイズはプラットフォームに依存しますが、最大値は約 20 億ですが、通常は 32 ビット符号です。64 ビット プラットフォームの最大値は通常、約 9E18 です。PHP は符号なし整数をサポートします。PHP 4.4.0 および PHP 5.0.5 以降、整数サイズは定数 PHP_INT_SIZE を使用して決定でき、最大値は定数 PHP_INT_MAX を使用して決定できます。

于 2012-01-07T16:11:57.233 に答える