![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
コンピュータ内では,数値も文字も命令も音声も画像もあらゆるものが0と1を組み合わせたbit列で表現されています。
10進数の65を,8bit長で表現すると,01000001です。
ASCII文字コードの'A'を,8bit長で表現すると,これも同じく01000001です(回答No.4,No.5で紹介されているリンク先を参照)
charは,8bit長のデータ型です。文字(character)しか格納できないわけではなく,数値も文字も命令も音声も画像も,8bit長で収まるのであればどんなものでも格納できます。なぜって,数値・文字・命令・音声・画像というのはそれをどう解釈したかという結果の違いであり,コンピュータにとってはあらゆるものが0と1を組み合わせたbit列なので。
char c = 65; と書くと,8bit長の変数cには次のbit列が格納されます。
01000001
intは,32bit長のデータ型です(16bit長の場合もあります)。整数(integer)しか格納できないわけではなく,32bit長で収まるのであればどんなものでも格納できます。
int c = 'A'; と書くと,32bit長の変数cには次のbit列が格納されます。
00000000 00000000 00000000 01000001
--------
「アルファベットの1文字が8bit長で表現できるのだから,1文字はあくまで1バイト(8bit)とする。漢字を使っている輩は,(私たち欧米人の)文字単位を複数並べて(漢字圏の)1文字を扱えばいい」
という方針は,ソフトウェアの国際化によって過去のことになり,
現代での基本方針は次のようになります。
「非アルファベット圏であっても1文字は1単位のデータとして扱えるべき。したがって国際化された1文字は8bit長以上のデータ型で扱うことになる」
プログラム言語の仕様は過去との互換性を維持する必要があるので,intという名を勝手に変えるわけにはいかないのですが,現在ではint型は文字を格納するためにも用いられています。
No.5
- 回答日時:
パソコンの基礎知識がないと理解できない事柄なので「こんな感じ」で説明しますね。
厳密に言うと、この説明は間違っています。
>> char c ='A'
>> char c =65が同じなのはなぜですか?
ざっくりというとパソコンの中にある計算機は数字しか扱えません。なので'A'は、最終的には65として扱われます。
65 = 'A'というのは取り決めで決まっていて(参考URL参照)、意味の分からない65として書くか、人間の目で見て分かる'A'で書くかは、書く人の感性の違いです。
>> char c='A' とint c='A'が同じなのはなぜですか?
C言語では機械の言葉に近い部分、エラーになるような言語は人間の言葉に近い部分に重きを置いていて、上で述べたように機械で扱う時の内容はどちらも数字の65になりますので、この2つの命令はC言語ではエラーとして扱われません。
じゃあ何が違うのかというとメモリに配置される時の領域の大きさで、例えば次の様になります。
char → 「65」
int → 「00 00 00 65」
参考URL:http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
No.4
- 回答日時:
そもそも、charというのはintよりも扱える数値の範囲が狭いというだけの型なのです。
char c = 'A' と char c = 65 は見た目こそ違いますが、内部では同じ行動をとっています。普通変数に何かを代入するときは、たとえそれが文字であっても、数字で保存されています。この例だと、'A'が代入された場合には65を代入しているわけです。この関連付けはASCIIコードというものに記されています。
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
printf("%d\n", c) とすれば、cに保存されている数字(65)をそのまま出力し、
printf("%c\n", c) とすれば、cに保存されている数字を文字(A)に変換してから出力します。
じゃあintで対応できるのに何でcharなんかあるのかということになりますが、そこは文字列などを扱うのに必要になってくるからです。最初のうちはintで代用できてしまうので存在価値がわかりませんが、学ぶにつれて必要性が分かってくるかと思います。
No.3
- 回答日時:
int i=127 と書くのと
int i=0x7f と書くのと
int i=0377 と書くのとで
全部同じ値になる、というのはわかりますか?
これらは、同じ数値の表現方法を変えたものです。
'A'というのも、これらの「整数を表現する方法」の一つです。
'A' は「'A'という文字を表わす数値」です。
C言語には、厳密に言えば「文字」はありません。
必要に応じて、整数を文字として扱っているのです。
char c ='A';
printf("%c",c) ;
で、'A'と出力されるのは、%cが「整数が表わす文字に変換する」というものだからです。
整数なので、int型でも使えます。charよりintの方が範囲が広いので、
int i='A' ;
としても、情報は失われません。
> char c ='A'
> char c =65が同じなのはなぜですか?
正確に言うと、違う場合がります。
'A' はASCIIコードでは65です。なので、 c='A'と書くことと、 c=65 と書くことは同じことです。
しかし、ASCII以外にも、文字コード系はたくさんあって、なかにはASCIIとまったく違うものもあります。
例: EBCDIC
その場合、65にはなりません。
> char c='A' とint c='A'が同じなのはなぜですか?
これも正確には同じではありません。メモリ上の表現が変わることがあります。
char c='A' とした場合、char分の領域だけ(一般には8bit)使って、'A'に相当する数値が記憶されます。
int c='A' とした場合、int分の領域だけ(例えば、int型が32bitあるなら、その32bit)使って、'A'に相当する数値が記憶されます。
No.2
- 回答日時:
むしろ
コンピュータ内部では文字も数値で表される
と言った方がよいかも>#1.
ちなみに質問に挙がっている
char c ='A';
と
char c =65;
は, 必ずしも同じではありません.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
csvファイルからの読み込みがス...
-
半角カナ→16進
-
C言語の質問です
-
カラー画像からグレースケール...
-
switch文で文字を比較すること...
-
文字列の比較について
-
3桁区切(コンマ)記号をつけ...
-
charでの計算?
-
C言語で文字列操作を忘れてしま...
-
干支のプログラム
-
fgetsなどのときのstdinのバッ...
-
char型からのバイト数取得
-
c言語についての質問です。
-
int main()の・・・
-
charからLPTSTRへの変換方法
-
[C++]ファイル出力について
-
c言語の文字列の逆順のプログラ...
-
CStringをwchar_tに変換したい
-
C++の関数テンプレートで分から...
-
文字列について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
テキストデータをそのままバイ...
-
charでの計算?
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
2曲同時再生するにはどうした...
-
C言語の入力した文字を反転させ...
-
配列をnビットシフトする
-
3桁区切(コンマ)記号をつけ...
-
int main()の・・・
-
型変換
-
CStringをwchar_tに変換したい
-
'const char *' 型は 'char *' ...
-
間接操作のレベルとは
-
double型の値をchar配列に変換...
-
絶対パスからのファイル名の切...
-
switch文で文字を比較すること...
-
c++ 文字列を入力して、一文字...
おすすめ情報