技術共有

int型変数で表現される範囲の計算原理

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. 理解する

ここに画像の説明を挿入します
通常、int 型変数は 4 バイトを占め、1 バイトは 8 ビットで、各ビットには 0 と 1 の 2 つの状態があります。したがって、int 型変数は合計 2^32 個の状態を表すことができます (つまり、2 つの状態を表すことができます)。 ^8 データ値)。

2. 通常 int 型整数の値の範囲が -2147483648 ~ 2147483647 であるのはなぜですか

07:36に開始
さらなる理解
        聞く:上記 2 つのビデオから、int 型で表現できる正の整数の範囲は 1 ~ 2^31 - 1 であることがわかります。このロジックを負の整数に類推すると、表現できる整数の範囲は次のようになります。 int 型では -2^31 + 1 ~ 2^31 -1 ではないでしょうか? 2^31という値が得られないのに、なぜ-2^31という値が得られるのでしょうか?
        答え:コンピューター サイエンスでは、最も一般的に使用される符号付き整数表現は次のとおりです。2の補数表現 。この方法は、正と負の数を表現する問題を解決するだけでなく、2 進数の加算と減算の演算も簡素化します。この表現を詳しく見てみましょう。
        1. 正の数 : 正の数値の 2 進数表現は、符号なしの数値と同じです。たとえば、3 を 3 桁の 2 進数で表現すると 011 になります。
        2. 負の数 : 負の数の表現は、正の数の補数によって実現されます。負の数の 2 の補数は、数値の絶対値の 2 進表現を反転し、1 を加算することによって計算されます。例えば:
① 否定:まず 3 の 2 進数表現である 011 を 100 に反転します。
② 1 を足す:100 に 1 を足すと 101 になるので、-3 の 2 の補数表現は 101 になります。
         32 ビット整数変数の場合、その最上位ビット (符号ビットとも呼ばれます) は符号を表し、0 は正を表し、1 は負を表します。残りの 31 ビットは数値を表すために使用されます。次に、先ほどの質問に戻ります。
        1. 正の範囲(0を含む) : 符号ビットは 0 で、残りの 31 ビットは 000…000 (31 個の 0) から 011…111 (31 個の 1 秒) までの値を表すことができます。対応する 10 進数の範囲は 0 ~ 2^31 - 1 です。
        2. マイナスの範囲 : 符号ビットは 1 で、残りの 31 ビットは 100...000 (31 の 0) から 111...111 (31 の 1) までの値を表すことができます。このうち 2 の補数 100...000 (ゼロが 31 個) は -2^31 を表し、対応する 10 進数値は -2^31 となります。 2 の補数 111...111 (1 が 31 個) は -1 を表し、対応する 10 進数値は -1 です。
        正の数値範囲: 1 ~ 2^31 - 0; 負の数値範囲: -1 ~ -2^31、合計数は依然として 2^32 の異なる状態です。したがって、通常、int 型整数の値の範囲は -2147483648 ~ 2147483647 (つまり、-2^31 ~ 2^31 - 1) となります。

3. int 型は何バイトを占めますか?

64 ビット int は何バイトを占有しますか? 整数型 int、long、long long の違い
64 ビット int は何バイトを占有しますか? [インタビュー] int は何バイトを占有しますか?
32 ビット マシンと 64 ビット マシンの違いと、基本的なデータ型が占めるバイト数
C言語の整数型(値の範囲と長さを含む)
int型は何バイトを占めるのでしょうか?
プラットフォーム別のint型とポインタ型のデータサイズ
Javaのsizeof()の問題
Pythonのint型変数は任意のサイズの整数を格納できます

要約:

  1. C および C++ のデータ型のサイズは、コンパイル標準、コンパイラ、オペレーティング システムのビット数などの影響を受けます。
  2. Java および Python のデータ型のサイズは、言語仕様またはインタープリターの実装によって決まり、コンパイラーやオペレーティング システムのビット数などの要因には影響されません。
  3. この設計の違いの主な理由は、C と C++ は通常、ハードウェアと直接対話する必要があるシステム プログラミング言語であるため、データ型のサイズは基盤となる環境によって異なりますが、Java と Python はデータ型のサイズが大きいためです。より高いレベルの抽象化を備えたレベルのプログラミング言語。設計目標はクロスプラットフォームの一貫性です。

4. お勧めします

再度お勧めします
パート 3: 問題の原因