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ランキング
-
カンマの含まれる文字列の数値...
-
数値をASCII文字にする方法につ...
-
VB6 機種依存文字の変換
-
VC++ マルチバイト文字とUniCod...
-
携帯の絵文字について
-
外字を削除したい
-
機種依存文字
-
特殊な文字列のデコードについて
-
16進数の文字列をアスキーコー...
-
iPhoneの絵文字をWebサイトに表...
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
文字列の括弧について(初心者)
-
文字の入力で横バー上段、中断...
-
ファイルから読み取った改行文...
-
メッセージボックスで1025文字...
-
エスケープ文字の復帰(¥r)と...
-
全角括弧と全角読点の間隔を狭...
-
エクセルVBA 文字列領域が不足...
-
ファイルの内容をstrcpyを使っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマの含まれる文字列の数値...
-
数値をASCII文字にする方法につ...
-
16進数の文字列をアスキーコー...
-
fgetws関数で読み込んだUNICODE...
-
1バイト文字の上位4ビット・...
-
マクロで半角を全角に
-
VC++ マルチバイト文字とUniCod...
-
ヌル文字とは一体何でしょうか
-
VB6.0 Base64のデコード方法を...
-
VBA ASC関数で変換できない文...
-
preg_replaceがうまくできない
-
外字を削除したい
-
文字数が決まっていないの文字...
-
サロゲートペア文字の半角カナ...
-
携帯の絵文字について
-
VB6 機種依存文字の変換
-
テキストエディタで特定の文字...
-
i-modeの絵文字をパソコンで再現
-
PHP 日付フォーマット
-
16進数の文字列を10進数の数値...
おすすめ情報