• ベストアンサー

コンピュータは"数字"か「文字」かどうやって!判断

コンピュータは"数字"か「文字」かどうやって!判断しているのですか? C言語でしたら  kakaku=1+2/*右側が自動的に3と計算されるのはなぜ・文字と数字の認識はどうやって行っているのですか*/ あくまでの私の憶測ですが!? コンパイラソフトなどをセットアップすると!数字は文字とは違う位置決めをする”数字”としての働きをするように!あらかじめプログラムされているから、数字としての機能する!?だとは思うのですが? ”本当”はどうなんでしょうか?  宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>コンピュータは"数字"か「文字」かどうやって!判断 プログラム言語によりそれは差があります。 基本的にコンピュータは、数字を扱うだけです。人間が書いたプログラムにより、数字として扱うか、文字として扱うかが決まります。 なので、古い言語のCOBOLでは、”1+2”なんて、人間にとっては計算可能なものであっても、そのまま式を与えると、エラーになって停止します。 でも、”1+2”を数式として認識する処理を言語に人間が組み込み、数式として処理できるルーチンを用意しておけば、エラーにならず、”3”という値を返すことが可能になります。 ですから、”どうやって判断しているか”といえば、「数字か文字か判断するルーチンを、人間が用意して、言語に組み込んでいて、それに従ってコンピュータが判断している」ということになります。 なので、人間の組み込んだルーチンがいまいちだと、「これは数式だろう!」というケースでも、文字とみなしてしまい、エラーになることもあるでしょうね。

Campus2
質問者

お礼

 ご回答真にありがとうございました。 A:※”ルーチン”  を、人間が用意して、言語に組み込んでいて、それに従ってコンピュータが判断している」ということになります。    ルーチン判断しているとのことですね^^ ※プロシージャ(手続き)やファンクション(関数)

その他の回答 (4)

回答No.5

コンピュータが、「文字か数値化判断する」ということは、まずありません。 まず、注意しなければならないのは、誰かが書いた、 kakaku=1+2 というプログラム(の一部)は、いかなる場合でも、「文字と判断」されます。 一般的にソースコードといいますが、プログラムを、「文字として入力」しているわけで、ソースコードは、「文字の集まり」と解釈されます。 そして、Cなら、 kakaku=1+2 と書いた場合の、 1 や 2 は、「(整数型の)数値定数を表す」ということに、Cの規則で決まっています。 ですから、プログラムが「コンパイルされるとき」に、「ここに書いてある 1 や 2 という『文字』は、本来、数値を表現したくて書かれているのだ」と判断されて(上述したように、Cの規則では、こう書いたときには数値を表現することになっているので)、文字として書かれているものを、「数値に変換」して、計算します。 一方で、Cのソースで、"1 + 2" と書かれていれば、これは、「文字列を表す」と、Cの規則で決まっていますから、コンパイラは、「この部分は、文字列として扱って欲しい」と判断して、数値に変換せずに処理をします。 こういうわけで、 ・人間が書いたソースコードは、「文字」として扱われます。 ・それの中で、(たとえば、Cの規則で)「数値のつもりで書かれている部分」があれば、コンパイラなどが、「数値に変換」して処理を行います。

Campus2
質問者

お礼

御回答誠にありがとうございました。 A;Cのソースで、"1 + 2" と書かれていれば、これは、「文字列を表す」    そうでしたね^^ 他のA(アンス)に・文字コードで決められているとあります・・    なんとなくわかってきました。  

noname#215107
noname#215107
回答No.4

kakaku=1+2; の場合、1+2を計算する機械語命令に直すのは無駄なことなので、コンパイルする前にプリプロセッサが、3に直してしまいます。 要するに、本格的に機械語に直す前に、下処理をする機能があるのです。 Cコンパイラの場合は(基本は)ワンパスコンパイラ(ソースを上から下まで順に一回だけ読む)なので、コンパイラとプリプロセッサを兼ねている場合が多いです。

Campus2
質問者

お礼

御回答誠にありがとうございました。    A;コンパイルする前にプリプロセッサが、3に直してしまいます。 要するに、本格的に機械語に直す前に、下処理をする機能があるのです。  プリプロセッサが!?・・いきなり  うわーレベル高いっス!

回答No.3

手動入力時に、使用者がキー入力操作で指定しています。 キーボードには100以上のキーが配列されています。コンピューター入力回路は、どのキーが押されたかで特定の2進数を発生させ、処理部へ送ります。後はプログラムに従って処理と出力が行われます。 数字か文字かを判断しているのは人間です。 コンピューターは人間の指示(キー操作)に忠実に従って、電脳処理をしているだけです。 入力処理の過程でアスキーコードやユニコードなど、特定の2進数が割り振られます。 キーには半角/全角切り替え、Back Space、Delete、Enter その他、処理命令的機能を割り付けられたものもあります。 コンピューターを便利な道具として活用している主体は、あくまで人間です。

Campus2
質問者

補足

 御回答真にありがとうございました^^ A:プログラムに従って処理と出力が行われます。 Q: 新たな疑問ですが!?  ここでいうプログラムとは・どこのプログラムのことなのでしょうか!  C:言語を動かすとに使用する  1) MinGW  2) MSYS 3) gdb 4) gcc のことなのでしょうか?  宜しくお願いします。

  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.2

簡単です。通常文字は8ビット256種類の割り当てが可能です。ですから文字と同等に数字にも特定のビットを割り当ててあるのです。通常は16進数で01 02・・・ です。アルファベットは21から。全角の場合は2バイト 16ビットになりますから漢字や仮名と重複することなく割り当てが可能になりますから混同の心配は全くありません。

Campus2
質問者

お礼

ご回答真にありがとうございました^^ A:8ビット256種類の割り当てが可能 16進数でも16種類なので・楽勝ですね    なるほど・コードで仕分され!数字・文字と判断されている・  たぶん

関連するQ&A

  • javaScriptで文字列の数字判断について

    こんにちは。 神奈川の大学生です。 学校でプログラムを少し勉強しています。 初心者ですが宜しくお願いします。 質問なんですが フォームから文字列を取り出し JAvaScriptでチェックしたいです。 その文字列が例えば”KKK0001”だとして 前から4桁目から数字だと判断したいです。 この数字と文字を分ける(判断する?)には何を使えばよいでしょうか? ずーと考えて調べていますがわかりません。 宜しくお願い致します!

  • VBA 数字と文字の判断について

    VBA 数字と文字の判断について Excel2000を使用しています。 ユーザーフォームのテキストボックスに A00B0.5C-3.0 というように入力してコマンドボタンのOKなどを押すとセルのA1に00 B1に0.5 C1に-3.0 と表示させたいのですが、下記のマクロを使用すると、 A1に00 B1に0 C1に5 D1に3 E1に0 というように、「-」と「.」も文字と認識してしまい分かれて表示されてしまいます。 セルの位置にはこだわりませんが、連続で 00 0.5 -3.0 と表示させるにはどうしたらよろしいでしょうか? Dim re As Object Dim d() As String Set re = CreateObject("VBScript.RegExp") re.Pattern = "¥D+(¥d+)" re.Global = True d = Split(Trim(re.Replace(tx1.Text, "$1 ")), " ") If UBound(d) > 10 Then Selection.Resize(1, UBound(d) + 1) = d Set re = Nothing   よろしくお願いします。

  • 文字列を数字型に変換したい

    いつもお世話になっております。 eclipseというツールでC言語のプログラムを触っているのですが、 文字列の数字を数値型に変換して掛け算をしたいのですが、 型変換の関数はありますでしょうか??

  • 文字列としての数

    ものすごく初歩的な質問かもしれません。C言語を始めコンピューターでは、単なる数値と文字列としての数値の事実上のデータ(2進数とか?)は全く違うものという捕らえ方よいのでしょうか?又、エクセル などでは「’」をつけると数字も文字列として認識されるということですが、この場合の電算機上の認識は先程の認識法とは別物なのでしょうか?この辺は企業秘密かも知れませんが・・・

  • processingの文字入力について

    現在、プログラミング言語processingを勉強しているのですが、どのようにプログラムを書いたらいいか分からないので、教えてください。 作ろうとしているのは、フラッシュ暗算を行うプログラムなのですが、 processingの場合は、文字入力するときに、1文字しか認識されませんが、 もし2文字、3文字などを入力したい時は、どのようにすればいいのでしょうか? 例えば、フラッシュ暗算で、合計値が52だったとき、52を入力すると、正解とでるプログラムを作りたいわけですが、おそらく配列を使うと思いますが、いったいどのようにしたら52という数字を配列に格納させればいいのでしょうか?

  • コンピュータって?

    ずっと疑問だったけど、私考なんだけど、CPUが500MHZとか CPUの性能を表すけど、これって、添付画像の下の波というか タイミングの回数で、感知する時間、しない時間を1サイクルとして 1秒間に500MHZだったら、1秒間に、0と1を5億回分まで認識出来ますってことでしょうか? また、プログラムでは、なんちゃら言語とかあるけど、これは わかりやすいように言葉(単語)になってるのだとおもうけど { } \ だったり、print だったり、そういう単語や記号を 0011001011(←適当)に変換したのがマシン語だと思うのだけど この0と1だけで、計算したり判断したりできるのがずっと 不思議なんだけど、たとえば、もし、printが0011001011だったと したら、0011001011は印刷をすることと、決められてるのしょうか? それぞれの記号やプログラム単語などには、それぞれに、0と1の 羅列がきめてあり、それに伴った動きをするってことでしょうか? そこが、未だにわからないです。 だとしたら(勝手にこうかな?って思ってるので違うかもしれないけど) プログラムの単語ほどに、0と1の組み合わせがあるってことに なるんでしょうか? だとすると、誰がそれを決めてるんだろう? 新しい用語が増えるたびに、決まるのだろうか?とか もし、そうなら、新しい用語が決まる前のコンピュータは その紐付けがないから動かないとなるとおもうから、 いや、これはやっぱり違うのかなって思っちゃう。 どうして1と0で動きが決まるのかがずっと疑問です。

  • IRIX用のCコンパイラ

     C言語で作成したプログラムをOSがIRIX 6.5のコンピューターで使いたいのですが、このコンピューターにはCコンパイラがありません。  IRIX 6.5で使えるCコンパイラ(できればフリー)を、教えてください。  インストールの手順があるとありがたいです。  よろしくお願いします。

  • 数字をセルの中央に配置して、右側で揃えたい

    数字をセルの中央に配置して、右側で揃えたいのですが、できますか? 例えば、セルA1に30.2、セルA2に2.2が入っているとき 中央揃えをすると、上下の数字の小数点の位置が左右にずれます。 小数点の位置を揃えて表示したいのですが、できますか? 2.2を02.2と認識させられれば良いのですが。

  • アセンブラ言語の数字を数値に変換するプログラム

    LD GR3,GR1 ;GR3にGR1の数字を入れる。 AND GR3,=#000F ;数字を数値に変換 というアセンブラのプログラムがあったのですが、なぜGR3と16進数#000Fの論理積をとることで数字を数値に変換できるのでしょうか。 それと、ここでいう数字、数値の違いとは、数字の1はコンピュータ上では 49という数値に変換される(アスキー文字)という認識でよろしいでしょうか。

  • DOSの文字の色を変える方法。

    C言語でDOSプログラムを作っているのですが、 文字の色を変えることはできるのでしょうか? #include <stdio.h> void main(){ printf("あいうえお"); } コンパイラはボーランドで、DOSはXPのものとし、 文字を赤くするとしたら上の例ならどのように 書けばよいのでしょう?

専門家に質問してみよう