0

a のサイズは実装依存であると標準が言っていることは理解していますが、その理由はわかりlong integerません。

必要なのは、-2147483647 から 2147483647 または 0 から 4294967295 を格納できることだけです。

1 バイトが 8 ビットであると仮定すると、これには 4 バイト以上は必要ありません。では、1 バイトが 8 ビット未満の場合にのみ、long 整数が 4 バイトを超えると言うのは安全でしょうか? それとも他の可能性もあるでしょうか?スペースを浪費する非効率的な実装のように?

4

5 に答える 5

2

long32 ビットより大きい値の明らかな用途は、より広い範囲を使用できるようにすることです。

たとえば、long long int(および会社が) 標準に含まれる前に、DEC は 64 ビット (アルファ) プロセッサと 64 ビット オペレーティング システムを販売していました。彼らは、以下を備えた(適合する)システムを構築しました。

char = 1 byte
short = 2 bytes
int = 4 bytes
long = 8 bytes

彼らがこれを行う理由については、明らかな理由は、顧客が 64 ビット型にアクセスして、64 ビット ハードウェアを利用できるようにするためでした。

于 2012-05-27T02:45:53.593 に答える
1

余分なバイトはスペースの無駄ではありません。より広い範囲は非常に便利です。標準では、正確な範囲自体ではなく、最小範囲を指定しています。より広い型を持つことに問題はありません。

規格が元々int16 ビット以上であるべきだと規定していたとき、一般的なプロセッサはそれ以下のレジスタしか持っていませんでした。long2つのレジスターと特別な操作を表現!

しかし、その後 32 ビットが標準になり、現在ではints はどこでも 32 ビットであり、longs は 64 です。現在、ほとんどのプロセッサには 64 ビット命令があり、long多くの場合、単一のレジスタに格納できます。

于 2012-05-27T02:45:16.640 に答える
1

あなたはかなりのことを想定しています:

  • バイトはCHAR_BITビット幅です

PDP-10 には、1 ~ 36 ビットの範囲のバイトがありました。DEC VAX は、128 ビット整数型の操作をサポートしていました。したがって、標準が義務付けている以上のことを行う十分な理由があります。

  • データ型の制限は §3.9.1/8 に記載されています

標準テンプレート std::numeric_limits (18.3) の特殊化は、実装の各算術型の最大値と最小値を指定するものとします。

ルックアップ<limits>ヘッダー。

ジャック・クラインによるこの記事はあなたにとって興味深いかもしれません!

于 2012-05-27T02:45:36.463 に答える
0

特定のサイズの整数が必要な場合は、指定されたサイズの型を使用します。

int8_t int16_t int32_t int64_t int128_t ...

これらは、いくつかのランダム ヘッダー ファイルで使用できます (使用している OS によって異なりますが、C++ では <stdint> のようです)。

先頭に au を使用した署名なしバージョン (uint32_t) があります。

他の人は、サイズがなぜそうなるかについてすでに答えました。

最新の Intel プロセッサも 256 ビットの数値をサポートしていることに注意してください。もったいないでしょ!8-)

おー!また、time_t も 64 ビットを使用し始めています。2068 年には、32 ビットの time_t が負になり、1800 年後半の日付になります。これは、いくつかの目的で 64 ビットを採用する正当な理由です。

于 2012-05-27T04:01:47.533 に答える