Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

asciiの必要性について

低レイヤーの勉強を始めたばかりの者です。
asciiコードって、なんで存在してるんですか?
人間がコンピュータに打ち込んだ文字をメモリに2進数8bitで保存しているなら、「16進数のasciiに一旦変換してから2進数に直して保存する」といった処理は無駄ではないのですか?
2進数が16進数と相性が良いことはわかっています。確かに4桁の2進数を16進数に直すのは確かに簡単だと思います。

ただ、「2進数とアルファベットの対応表は見にくいから16進数で表現してる表を作った」だけであって、「アルファベットを一旦16進数に直すという処理はコンピュータの中では行われていない」のであれば納得できます。

0

3Answer

~進数というのは数値を「人間のためにどう表記するか」のバリエーションに過ぎず、コンピュータの中のデータ(文字コードなど)自体を変換するとか直すとかいうことではありません。

1Like

Comments

  1. @voyce_sakamoto

    Questioner

    バリエーションにすぎず、という言葉で何となく腑に落ちました。ありがとうございます。

最後に推測されている通りです。

なお、ASCIIコードは、数値と文字の対応を定めたものです。
その数値を何進数として表現するかとは関係ありません。
コード表によっては、8,10,16進数が併記されているのではないでしょうか。

また、PCが2進数を出力したとして、それは、文字に変換されたもので、元の数値そのものではありません。
PCは、表示される数値が何進数であろうが数値を文字に変換し、さらには、その文字の形に見えるようにドットパターンを生成しています。

さらに、打ち込んだ時点では、文字ではなく数値です。
ただし、キーボードからPCが受け取るのは、スキャンコードと呼ばれるもので、ASCIIコードではありません。
PCは、受け取ったスキャンコードと接続されているキーボードの配列種別から、文字コードを生成します。

無駄な変換なしにPCに数値を扱わせるなら、CPUのビット数分のスイッチとLEDを並べたキーボード(?)が最適です。

1Like

Comments

  1. @voyce_sakamoto

    Questioner

    なるほど、、スキャンコードというものがあるんですね、、
    というか、まずキーボードから画面に表示させる間になにか処理があるとか考えてませんでした。
    あと、asciiはべつに16進じゃなくてもいいってことですよね。なんか16進にとらわれてました。丁寧な回答、ありがとうございました。

ASCIIは1文字を1バイトとしてどう扱うかのを決めているだけです。
また文字にしろ数値にしろ人間がどのように読もうが、コンピュータからはバイナリでしかなく、そこのお膳立てはコンパイラなり、表示プログラムのはなしです。

下記Cでの例ですが、アルファベット大文字Aは数値にすると10進で65です。
16進だと0x41、2進だと0b1000001ですが下記のようにどのようにも記載することができます。
同様に表示するときもそれを文字として扱うか数値として扱うかで変わります。
プログラム的にはchar型は1バイトのデータを表す型でしかありません。

char a = 'A'; //シングルクォートはASCIIとして数値に変換
char b = 0x41; //0xは16進数を表す
char c = 65; //10進
char d = 0b1000001; //0bは2進数を表す
printf("a:%c, b:%c, c:%c\n", a, b, c); //全部Aと表示される
printf("a:%d, b:%d, c:%d\n", a, b, c); //全部65と表示される

実行例: https://ideone.com/ahTdc0

0Like

Your answer might help someone💌