8 進数リテラル:いつ?なぜ?これまで?[閉まっている]

StackOverflow https://stackoverflow.com/questions/44569

  •  09-06-2019
  •  | 
  •  

質問

私は自分のコードで 8 進数を使用したことはありませんし、それを使用するコードに遭遇したこともありません (16 進数とビット操作にもかかわらず)。

私が C/C++ でプログラミングを始めたのは 1994 年頃なので、これには若すぎるのかもしれません。古いコードは 8 進数を使用していますか?C には、先頭に 0 を付加することでこれらのサポートが含まれていますが、これらの基数 8 の数値リテラルを使用するコードはどこにあるのでしょうか?

役に立ちましたか?

解決

最近、3 ビット フィールドにアクセスするネットワーク プロトコル コードを作成する必要がありました。それをデバッグしたい場合は、8 進数が便利です。

念のため、これの 3 ビット フィールドが何であるかを教えていただけますか?

0x492492

一方、これと同じ数字を 8 進数で表現すると、次のようになります。

022222222

さて、最後にバイナリ (3 個のグループ) で:

010 010 010 010 010 010 010 010

他のヒント

最近、8 進リテラルに遭遇する唯一の場所は、Linux でファイルのアクセス許可ビットを扱うときです。これは通常 3 つの 8 進数で表され、各桁がそれぞれファイル所有者、グループ、その他のユーザーのアクセス許可を表します。

例えば0755 (ほとんどのコマンド ライン ツールでは 755 のみ) は、ファイル所有者が完全なアクセス許可 (読み取り、書き込み、実行) を持ち、グループと他のユーザーが読み取りと実行のアクセス許可のみを持っていることを意味します。

これらのビットを 8 進数で表すと、どのようなアクセス許可が設定されているかを理解しやすくなります。0755 が何を意味するかは一目でわかりますが、493 や 0x1ed はわかりません。

から ウィキペディア

Octalがもともとコンピューティングで広く使用されていた当時、IBMメインフレームなどのシステムは24ビット(または36ビット)の単語を採用していました。Octalは、8桁(または12個)の桁がマシン単語全体を簡潔に表示できるため、これらのマシンのバイナリの理想的な略語でした。また、Nixieチューブ、7セグメントディスプレイ、およびオペレーターコンソールに使用できる計算機を許可することでコストを削減します。バイナリディスプレイが使用できないほど複雑すぎる場合、10進数は、基数を変換するために必要な複雑なハードウェアと、文字を表示するのに必要な16進ディスプレイが必要です。

ただし、すべての最新のコンピューティングプラットフォームは、16、32、または64ビットの単語を使用し、8ビットがバイトを構成しています。このようなシステムでは、3桁の数字が必要であり、最も重要なオクタル桁は2桁のみを誤って表します(シリーズでは、同じオクタル桁が次のバイトから1つのバイナリ桁を表します)。したがって、16進数の数字は4桁の数字をカバーし、すべての最新のコンピューティングプラットフォームには4つの等しく分割されるマシンワードがあるため、16進数は今日のプログラミング言語でより一般的に使用されています。2つの単語サイズを持つ一部のプラットフォームには、Octalで表示された場合、より簡単に理解できる命令サブワードがまだあります。これには、PDP-11が含まれます。現代のユビキタスなX86アーキテクチャもこのカテゴリに属しますが、Octalはこのプラットフォームではほとんど使用されていません。

-アダム

コードでOctal数を使用したことも、使用したコードに出会ったこともありません。

きっとそうでしょう。標準によれば、ゼロで始まる数値リテラルは 8 進数です。これには、自明のことですが、次のものが含まれます。 0. 。リテラルのゼロを使用したり目にしたりするたびに、これは 8 進数になります。奇妙ですが本当です。:-)

民間航空では、由緒ある Arinc 429 バス規格の 8 進数の「ラベル」(基本的にはメッセージ タイプ ID) を使用します。したがって、アビオニクス アプリケーションのコードを記述するときにラベル値を 8 進数で指定できるのは便利です...

航空機のトランスポンダーでオクタルが使用されているのを見たこともあります。モード 3a トランスポンダー コードは、誰もが 4 つの 8 進数として扱う 12 ビットの数値です。もう少し詳しい情報があります ウィキペディア. 。一般にコンピューター関連ではないことはわかっていますが、FAA もコンピューターを使用しています :)。

役に立つのは、 chmod そして mkdir Unix の関数はありますが、それ以外に一般的な用途は思いつきません。

私がオクタルと出会ったのは、 PDP-11, どうやら C 言語も同様でした :)

tar ファイルは、情報を 8 進整数値の文字列として保存します。

言語の誕生に遡り、無数のプログラムに存在する標準を変更する理由はありません。私はまだasciiのキャラクターのoctal値で覚えていますが、aの六角値を考え出すために考えなければなりませんが、それはoctalで101です。数字の0は060です...^Cは003…

つまり、8進数表現をよく使います。

さて、本当に自分の鉱山を曲げたい場合は、PDP-10 のワード形式を見てください。

60 年代後半から 70 年代の古いプロセス制御システム (Honeywell H4400、H45000 など) がまだ多数存在しており、これらは 8 進アドレス指定で 24 ビット ワードを使用するように構成されています。一例として、最後に米国で原子力発電所が建設されたときのことを考えてみましょう。

これらの産業システムを置き換えるのはかなり大掛かりな作業であるため、絶滅する前に野生のシステムに遭遇し、その壮大なカスタム浮動小数点フォーマットに驚嘆するのは幸運かもしれません。

PDP-8 でプログラミングを学んだ人なら誰でも、心の中に 8 進数が大好きです。ワード サイズは 12 ビットで、それぞれ 3 ビットずつ 4 つのグループに分割されていたため、-1 は 8 進数の 7777 でした。このスキームは、16 ビット ワードを持っていましたが、依然としてさまざまなものに 8 進表現を使用していた PDP-11 で永続され、そのため *NIX ファイル パーミッション スキームが今日まで存続しています。

Octal は、最初に利用可能なディスプレイ ハードウェア (7 セグメント ディスプレイ) で最も役に立ちました。これらのオリジナルのディスプレイには、後で使用できるデコーダーがありませんでした。

したがって、デジタル レジスタ出力は、8 つのシンボルのみを表示できる利用可能なディスプレイに適合するようにグループ化されました。0、1、2 3、4、5、6、7 。

また、最初の CRT 表示管はラスター スキャン ディスプレイであり、最も単純な文字記号ジェネレータは 7 セグメント ディスプレイに相当しました。

動機となったのは、いつものように、可能な限り安価なディスプレイでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top