- ベストアンサー
初歩的な疑問です。パソコンはON・OFFの電気信号回路により2進法演算
初歩的な疑問です。パソコンはON・OFFの電気信号回路により2進法演算で作動していると思います。莫大なメモリー・CPUを駆使して各種プログラム言語の文法が考えられていると思います。よくわかりません。BASICなどでgoとかandとかのコマンド自体も2進法の構成ですよね。EXCELのvbaのコマンドもそうですね。windowsに関した言えば何万語からできているのですか。プログラミングなどを簡易化するのにコマンドを考えてそのコマンドに機能を持たせたのですか。スミマセン的外れな質問かもしれません。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
パソコンは二進数で動いています。 パソコンが理解できる唯一の言語は、二進数の並びである「マシン語」です。 マシン語には、次のような特徴があります。 (1)命令の種類は多くない (2)単純な動きをする命令を組み合わせて、複雑な処理をこなせるようになっている (3)人間にとって非常に難解 (2)と(3)は、プログラムをする側にとって、非常に厄介な問題です。 パソコンに「Xが10のとき、Bに行け」という動きをさせるにも、00000001,00001010,00001010,11111110,00001010,11001010,00000010,11001001・・というようにプログラムしなければいけません。(これのどの部分が「Xが10のとき」に該当し、どの部分が「Bに行け」に該当するのかが解る人は、ほぼ100%、いないでしょう) これではやってられないので、人間にとって解りやすい言葉でプログラムを書いて、それを機械がわかる言葉に翻訳(コンパイル)させてから動かそうということになります。BASICやvbaなど、世に出ているプログラミング言語の多くが、それです。 上記の処理をBASICで書けば、「if X=10 goto *B」のようなプログラムになるでしょう。英語が苦手な人は引くかもしれませんが、0と1の並びと比べれば、はるかにマシになったはずです。 windowsが何万語でできているかは解りません。多くのプログラムが集まって、一つのwindowsとして動いていることもあり、当てになる試算ができません。ただ、マシン語で動いていることもあるので、命令の種類自体は、そう多くないはずです。
その他の回答 (4)
- mk48a
- ベストアンサー率56% (1133/2007)
>パソコンはON・OFFの電気信号回路により2進法演算で作動していると思います CPUもメモリも元を辿ればトランジスタ回路になります。 車の仕組みを知らなくても車の運転ができるように、コンピュータの細かい仕組みがわからなくてもプログラムはできます。 >BASICなどでgoとかandとかのコマンド自体も2進法の構成ですよね これはよくわかりません。 プログラム言語が2進法とかは普通言いません。 BASICなどのインタプリタ言語はプログラムのコードをOSがわかるように翻訳するプログラムがあります。 C言語などは、コンパイラというプログラムがOSのわかる状態に変換してくれます。 そういうあたりでもっと深く知りたい場合は、以下の書籍をお勧めします。 プログラムはなぜ動くのか http://ec.nikkeibp.co.jp/item/books/P81010.html 合わせてこちらも読むと良いと思います。 コンピュータはなぜ動くのか http://ec.nikkeibp.co.jp/item/books/P81650.html
- FEX2053
- ベストアンサー率37% (7991/21371)
その質問は「豚骨ラーメンって豚の骨を使うんですよね。で、どうやったら美味しくできるんですか?」という質問に近いです。考える要素が他にも山ほどあって理解しなければならない事柄が多すぎます。 でも、敢えて言えば。 コンピュータを動かす素子は、どんなのものでも電流のon/offでしか動作しません。ただ、このon/offの組み合わせによって、他の場所のon/offの状態を入れ替える(and/orなどの論理演算)事が可能ですので、この組み合わせを事前に作っておけば、何らかの特殊な動作をさせることが可能なんです。 on/offの状態の組み合わせを記録しておく場所が「広義の」メモリになり(ハードディスクなどもこの定義ではメモリになります)、このメモリからon/offの組み合わせを引っ張り出し、所定の機器の動作をコントロールする機器が「広義の」CPUになります。 で、このon/offの組み合わせのうち、CPUを直接動作させるものを「プログラム」と言い、「プログラム」から参照される部分を「データ」と言います。原理的には両者は同じものですから、コンピュータの黎明期には、この両方は混在して存在していたんですよ。 プログラムがon/offの組み合わせだけ=2進数の表記だけだと分かりにくいので(2進数のままのプログラムを機械語と言います)、人間の言葉に近いものに変換するプログラムを作り、人間はその書式に従ってプログラムを書くようになりました。BASICなどがこれで「プログラム言語」と言います。 「プログラム言語」で毎回処理を書いていると分かるのですが、入出力など「良く使う処理の集まり」があります。この「良く使う処理」のうち「コンピュータ本体を動作させる」分をまとめて汎用化したのが「オペレーティングシステム」です。Windowsなどがこれですが、Windows自体も確かC言語などの「プログラム言語」で記述され、機械語に翻訳されてコンピュータを動かしているんです。 いわゆるプログラム言語の「言数」は、それほど多いものではありませんが(数百~多くても数千程度のはず、機械語だとそれこそ数十種類しかない)、通常はこの「言葉」を組み合わせて一つの動作を作りますので、例えば「ディスプレイに○を表示する」というだけで、「○」という文字のデータ、それをディスプレイに送る信号のコントロール、ディスプレイ上のどこに表示するか、など、on/off信号ベースでは多数の信号が飛び交っているのが普通です。
お礼
御教示有り難うございます。大変詳細な説明感謝します。自分でも質問しようかどうか迷っていたことでした。アプリケーションソフトを日常当たり前のように使っていますが、専門分野外なのでよくわかりませんでした。リニアプログラミングとかそのたの用語はかつて耳にしていました。ロータス1-2-3とか一太郎がありましたが目まぐるしく様変わりしました。プログラム計算機(カシオbasic)でプログラムを組んで仕事に役立てたこともあります。断片的なことはなんとなくわかりますが、それらがどのような関連性があるのかわかりませんでした。
- 0909union
- ベストアンサー率39% (325/818)
>windowsに関した言えば何万語からできているのですか これは企業のトップシークレットなので、分かりません。ただ、プログラムの大きさを表すのに、「何Kライン」とか言われます。これは、プログラムコード(ソース)を行数でカウントする物です。業務用のソフトだと10万Kラインとかになります。 これにコンパイルと言って、最適化しながらマシンコード、つまり2進数になります。ただこのマシンコードは実際の所2進数ではありません。なぜか? 1バイトは何ビットでしょう? そんな基本的なことから勉強してください。 最適化といいましたが、同じ事をするプログラムでも、作る人によって、最終的なサイズはかなり違います。これは、無駄なコードや、最適化した場合、増えたり減ったりするからです。 今のプログラムの進化は、このコンパイルによる最適化の仕組みが、進化し熟成したため、10年以上の物に比べ、より効率よくバイナリーコードに変換されます。 >プログラミングなどを簡易化するのにコマンドを考えてそのコマンドに このコマンドと言うのは話の筋からすると ”関数”とか ”メソッド”などを表しているかと思いますが、「簡易化」の場合もありますが、多くはそうではありません。 オブジェクト指向型のプログラム言語が出る前は、言語としての基本機能だけでプログラムを作る場合、ハードの知識がかなり必要で、時には「アセンブラ」と言って、マシンコードに近い命令しか持たない言語を使うしかありません。この言語は、表現が乏しく、小学校で習う4速計算と特定の命令(スタックさせたり、取り出したり、メモリー確保など)しかなく、今の3DCGやゲームなどを作るには適していません。作るとなると、A4で1000枚どころか、1万枚必要なくらいコードを書かないとだめです。 コンピューターをコントロールする部分と、計算をする部分と、効率よくあわせてゆくには、より話し言葉に近い状態で、コードを作れないと、特殊な天才な人しかつくれませんよね。 凡人にも造れるようにする事で、沢山の人がプログラムが作れるようになり、たくさんのアイディアや分担作業が可能になりますね。この分担する事によって、今ではアウトソーシングといって、プログラムのこの部分は時間がないから、外部の会社の人に作ってもらって完成させることができるようになっています。 「簡易化」と言うよりも、より直感的に作るために表現方法を多彩にしたと言う方が正しい。 どうでもいいこと(線を引くとか)は、プログラムを作る人が、ハードのこのメモリーにアクセスして、ここにビットを立てる、なんて事を考えなくても、line(1,2)とかすると、線が書けることで、沢山の人がプログラムを作れるようになる事と、開発速度の向上に貢献しています。 これをもっと進めたのが、オブジェクト指向のプログラム言語です。これによって、カプセル化(簡易化)が急激に進みました。 もう古い(死語)になっていますが「オブジェクト指向のプログラム」の本は図書館にたくさんありますので、それで勉強するといいでしょう。今のトレンドは「フレームワーク」です。
お礼
御教示有り難うございます。コンピュータープログラムにはとても興味があります。緻密な頭脳はありませんが関心はすごくあります。電子頭脳といわれるコン゜ュウターの基本中の基本が知りたかったのです。 ご説明で概略想像できました。でも難しいです。コンピューターウィルスなる不快なものはどこを攻撃しているのでしょうか。マシン語・バイナリー・アセンブラー等々のどこかだと思いますが。人間の叡智を結集してつくられたコンピューター。大変勉強になりました。何回も何回も繰り返し読ませて頂きました。
- maimai_san
- ベストアンサー率20% (121/601)
英語(各種コマンド)で命令書を書く、 ツールで(2進数に)翻訳する、 翻訳されたものをパソコンが読み実行する。
お礼
御教示有り難うございます。
お礼
御教示有り難うございます。大変参考になりました。マシン語に関していえば、たとえばaという単語は<1、1、0....>で表記されている。しかも万国共通である。ならばその単語帳・辞書はあるのでしょうか。多分非常に難解で天文学的でこれは通常意味をなさないからコンパイラーでマシン語に変換して使用する。という風に考えました。まだまだ判らないことばかりですが有り難うございます。