ホームページ > バックエンド開発 > C++ > C の整数: ちょっとした歴史

C の整数: ちょっとした歴史

Mary-Kate Olsen
リリース: 2025-01-01 09:12:11
オリジナル
233 人が閲覧しました

Integers in C: A Bit of History

整数は、「構造」とさえ呼べるのであれば、コンピューティングにおける最も基本的なデータ構造です。プログラマーとしての私たちの仕事は、これらの数字に意味を与えることです。ソフトウェアがどれほど複雑であっても、最終的には単なる整数であり、プロセッサは整数のみを理解します。

負の数が必要な場合は、2 の補数を発明しました。小数が必要な場合は、一種の科学表記法を作成し、 — ドーン — 浮動小数点数を作成します。結局のところ、0 と 1 から逃れることはできません。


整数の歴史

C では、int はほぼ自然型です。コンパイラは文句を言うかもしれませんが、ところどころにいくつかのフラグを設定すれば、ほとんどのコンパイラは次のような記述を許可します:

main(void) {
    return 0;
}
ログイン後にコピー

技術的には、これは次と同じです:

int main(void) {
    return 0;
}
ログイン後にコピー

この動作は、プログラマが型を指定しなかった場合、デフォルトで整数を使用するのが合理的であると考えるのが常識だった時代に由来しています。

C はこの考えを念頭に置いて設計されました。当初、int には標準サイズがありませんでした。 PDP-11 プロセッサ (C が最初に作成されたマシン) では、16 ビット アドレス指定が使用されていました。したがって、int も 16 ビットであることが理にかなっていると考えられていました。プロセッサが進化するにつれて int のサイズも大きくなるという考えがありました。

不思議な大きさ

このアプローチではいくつかの問題が発生しました。 int のサイズがプラットフォーム間で異なる場合、プロセッサごとにコンパイルされたプログラムの動作が異なる可能性があります。これにより、C はさまざまなアーキテクチャにコンパイルできる「不可知論的」言語であるという考えが打ち破られました。

int とは異なり、たとえば、char には常に明確に定義されたサイズがあります: 8 ビット、符号付き。その名前にもかかわらず、char はテキスト文字の抽象型ではありません。それは単なる 8 ビットの数値です。たとえば、リテラル 'a' は、コンパイル時に単純な数値 97 に変換されます。

では、ショートやロングなど、他のタイプについてはどうですか?アイデアは単純明快でした:

short <= int <= long
ログイン後にコピー

コンパイラーの実装者は、特定のサイズを完全に自由に決定できました。

ANSI C (1989) が秩序をもたらす

ANSI C 標準では、いくつかのルールが確立されました。

  • char: 少なくとも 8 ビット
  • short: 少なくとも 16 ビット
  • int: short 以上のサイズ (16 ビットまたは 32 ビット)
  • ロング: 少なくとも 32 ビット

この構成は役に立ちましたが、控えめに言っても、int のサイズは依然としてわかりにくいままでした。 C99 標準では stdint.h ヘッダーが導入され、状況は改善されました。

固定サイズの型ができました:

  • int8_t: 8 ビット
  • int16_t: 16 ビット
  • int32_t: 32 ビット
  • int64_t: 64 ビット

それ以降、このヘッダーを固定サイズの型で実装するかどうかはコンパイラ次第になりました。


整数の現状

現在、GCCClang などの最新のコンパイラーを使用すると、サイズはより予測しやすくなります。

Type Size
char 8 bits
short 16 bits
int 32 bits
long 64 bits (32 bits on 32-bit systems)
long long 64 bits

ロングロングはまだ多少独特ではありますが、少なくとも一定の一貫性をもたらします (正直に言うと、ロングロングはスタイリッシュだとさえ思います)。


何をするか?

現在、stddef.h や stdint.h などのヘッダーが十分に装備されています。 main 関数の戻り値の型など、必要な場合にのみ int を使用します。プロトタイピング以外の場合は、stdint.h の固定サイズの整数を使用することを好み、配列インデックスまたはループの場合は、stddef.h の size_t を使用します。これで今後の頭痛の種が軽減されることを願っています。

ここまでお付き合いいただきありがとうございました。また次回お会いしましょう!

以上がC の整数: ちょっとした歴史の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート