No.2ベストアンサー
- 回答日時:
C言語にはchar, int, float等、組み込みの型が幾つかあります。
しかし、文字列型というのは存在しません。
しかし、コンピュータも人間が扱う以上、
文字列の扱いを避けては通れないのも事実です。
そこで、char型配列を文字列の代用として扱います。
文字列の終わりには'\0'という特殊な文字を付加する規則になっています。
文字列の長さを戻すstrlen()等はこの規則に準じて'\0'を探すことで
文字列の長さを計測します。
ところで、コンピュータは、そもそも、非常に”おバカ"なので、
"文字列"はおろか、その前提となる"文字"すらも知りません。
コンピュータが扱えるのは"数値"のみです。
まさに、電子"計算機"そのものです。
(計算しかできないので、文字は知りません)
あまりに不便で仕方ないので
文字と数値との対応関係を定めることにしました。
この対応関係を文字コードと言います。
文字コードは1種類ではなく、何種類もあります。
代表的なものは
ASCIIコード、JISコード, SHIFT-JISコード、ユニコードなどです
(他にもたくさんあります)
たとえば
ASCIIコードでは
文字の'A'は数値の65に対応すると定められています。
これを
'A'のコードは65である。
と表現したりします。
"文字を数値に変換する"とは
文字のコードを求めることにほかなりません。
ちなみに'Z'は90です。
90-65+1=26
なので、
ASCIIコードではアルファベット大文字が26文字隙間なく並んでいることが
わかります。
だから、char変数cがアルファベット大文字かどうか調べる際に
if (c == 'A' || c == 'B' || .......|| c =='Z')
と長々しく記述しなくても
if (c >= 'A' && c <= 'Z')
とシンプルに書けるのです。
このとき
コンピュータは,
(文字を直接扱えないので)
if (c >= 65 && c <= 90)
と翻訳して実行します。
(この話はASCIIコード前提であることに注意が必要です。
すべての文字コードがASCIIと同様、アルファベットを隙間なく並べているとは
限りません。また文字のコードも異なる可能性があります)
C言語では、特に文字コードを定めているわけではありません。
しかし、文字列の終端を表す'\0'のコードだけはしっかり定めています。
'\0'のコードは0です。
これで
C言語では¥0を整数に変換すると、0という値になります
となるのです。
この回答へのお礼
お礼日時:2009/04/30 22:57
初心者の私にコンピューターに関する初歩から教えてくださり
大変感謝しております。何度も読み直して理解させていただきました。
本当にありがとうございました。
No.6
- 回答日時:
違う角度から。
。ヌル文字「\0」は NUL文字といって、文字列の終端を示す制御文字です。
ASCIIコード上では、NULは0x00に相当しています。
これが、NUL == 0 といわれる理由です。
\t(HT文字)とか\n(LF文字)とか使われることもあると思いますがこれと同じレベルですね。
printfで変換してくれています。
制御コードについてはASCIIコードについて、調べてもらえれば出てくると思います。
まぁ。普段使っているもの以上に覚える必要はないでしょうけど^^;;
ちなみにCでは、
似たようなもので、NULL というのがありますが、これはNUL文字と別なので注意してください。
NULLはあくまで無効なポインタを表す単語です。
NUL文字(「\0」)のように、何かの値を示すものではありません。
参考URL:http://ja.wikipedia.org/wiki/ASCII
この回答へのお礼
お礼日時:2009/04/30 22:51
非常に参考になりました。
大変感謝しております。
ASCIIコードと制御文字についてこれを機会に勉強してみます。
ほんとうにありがとうございます。
No.5
- 回答日時:
他の人が大体言っていますが、もう少し要約して説明してみます。
コンピュータの中ではご存知の通り、何もかもが数値で表現されています。
例えば「A」と言う文字もコンピュータの中では数値で、「65」と言う数値として扱われています。
「\~」(←ほにゃららの部分は数字)
と言うのは、「コンピュータの中の数値で~に対応する文字」の意味です。
・・・実際には「~」は8進数(8進数が何かについてはGoogle等で調べてみてください)で書かなければならないので、例えば「A」と言う文字を表現したければ、65を8進数に変換し「\101」としなければなりませんが。
「\0」は「コンピュータの中で”0”として扱っている文字」の事ですから、そのまんまそれは「0」である、と言うことです。
No.3
- 回答日時:
参考書の中の 「C言語では¥0を整数に変換すると、0という値になります」 という記述は、正確な表現ではありません。
特に 「変換」 しなくても、'\0' は整数0を表しています。
'\0' の 「定義」 について、K&Rには以下のように記述されています。
「
2.3 Constants
・・・
A character constant is an integer, written as one character within single quotes, such as 'x'.
文字定数は整数です。
The value of a character contant is the numeric value of the character in the machine's character set.
文字定数の値は数値です(その数値は、文字集合として機械が持つ数値の集合の元です)。
・・・
Character constants participate in numeric operations just as any other integers, although they are most often used in comparisons with other characters.
文字定数は、普通の整数と全く同様に使えます。
・・・
The character constant '\0' represents the character with value zero, the null character.
文字定数 '\0' は、整数値のゼロを表します(機械の中の文字集合では、元「ヌル文字」を表します)。
'\0' is often written instead of 0 to emphasize the characer nature of some expression, but the numeric value is just zero.
'\0' という表記が、或る 「式(expression)」 の文字としての性質を強調するために、数値のゼロの代わりに頻繁に使われますが、その値はただの整数値ゼロです。
」
(K&R、p.37~p.38)
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- 高校 読解力をつけたい 2 2023/06/10 15:11
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 画像の画素値を変えるC言語のプログラムで指定された画像の中に白い三角形を右上に表示させるにはどのよう 3 2022/10/30 01:16
- その他(言語学・言語) 外国語問題 1 2022/07/21 15:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進数の文字列をアスキーコー...
-
数値をASCII文字にする方法につ...
-
カンマの含まれる文字列の数値...
-
1バイト文字の上位4ビット・...
-
VB6.0 Base64のデコード方法を...
-
ヌル文字とは一体何でしょうか
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
JAVA System.out.println の ...
-
改行について
-
COBOLの改行
-
Excel関数「COUNTIF」で”文字”...
-
記号は半角と全角どちらがよい...
-
文字列型変数に1024を超えた文...
-
C# DataGridViewのセルを改行禁...
-
ダブルコーテーション(
-
ファイルから読み取った改行文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数値をASCII文字にする方法につ...
-
カンマの含まれる文字列の数値...
-
16進数の文字列をアスキーコー...
-
fgetws関数で読み込んだUNICODE...
-
マクロで半角を全角に
-
VB6 機種依存文字の変換
-
1バイト文字の上位4ビット・...
-
VC++ マルチバイト文字とUniCod...
-
VBA ASC関数で変換できない文...
-
preg_replaceがうまくできない
-
ヌル文字とは一体何でしょうか
-
Perlで値が文字列か数値かを区...
-
エスケープされたunicodeのデコ...
-
VB6.0 Base64のデコード方法を...
-
フォームからPOSTした際ボーダ...
-
int temp = 0; if(isdigit(arr[...
-
サロゲートペア文字の半角カナ...
-
ケータイの絵文字
-
HTMLエンティティ文字の変換
-
シフトJIS⇒MIMEエンコード(RFC2...
おすすめ情報