17:0と1だけの世界

それで、ロンリーエンジンってなんだよ?ちょっとかっこいい言葉ことばだが、おまえもジジイもかおきつってたし、どうもになるぜ。
論理ろんり演算えんざんだよ。そうだね・・・いよいよ試練しれんかうときたかもしれないね。
よせよおどかしやがって、失敗しっぱいしたらぬようなシレンじゃねえだろうな。
ハハハ、ことはないよ。論理ろんり演算えんざんってのは、プログラミングでけてとおれないかんがかたなんだけど、結構けっこうむずかしいんだよ。それでここまでは論理ろんり演算えんざんをわざとけてきたんだけど、さきすすむにはそろそろ基本きほん理解りかいしてもらわないとダメかもね。
おいおい、こともないややこしい数式すうしきとかてくるんじゃねえだろうなあ・・・
いや、数学すうがく数学すうがくでも、数式すうしきはほとんどいらないんだ。数字すうじ0と1だけしか使つかわないよ。
なんだよ、0と1しか使つかわないならもうオレサマの勝利しょうりまったも同然どうぜんじゃないか!
本当ほんとう大丈夫だいじょうぶかなあ。
0と1だけなんだけど・・・いや、グズグズってても仕方しかたがない。じゃあいくよ!



ねえ、コンピューターってものすごいはやさでものすごい計算けいさんをいっぱいしてくれるけど、かずは0からいくつまでっているとおもう?
そりゃあ、すげえいっぱいまでってるんじゃねえのか?100おくとか1000ちょうとかよ。
じつはコンピューターは0と1しからないんだ。
な、なにぃ・・・やいインテリ、いいかげんなことってんじゃねえぞ。0と1だけじゃ電卓でんたくにもならねえぞ。けどちゃんと電卓でんたくになったじゃねえか!
1の0と1だけじゃあなんにもできないね。コンピューターはね、0と1をたくさんたばねて計算けいさんすることができるのさ。
たとえばSwitchスイッチは0か1を32とか64たばねたものをかずとして使つかうんだ。そうだねえ、0か1ってってるけど、1のライトだとおもってよ。ひかってたら1、えてたら0。そのライトが32か64ずらっとならんでる。想像そうぞうできるかな?
それくらいなら想像そうぞうつくぜ。
じゃあ32のランプがそれぞれついたりえたりするとして、そのひかかたのパターンて何個なんこあるかわかるかい?
それぞれがついたりえたりするんだな。一番いちばんみぎがついて、えて、そのとなりがついてるとき一番いちばんみぎがついて、えて、もうひとつとなりがついてるときに・・・うおお!かぞえられねえ!
ランプ1だと2とおりだよね。ついてるのとえてるの。2だと4とおりになるのはわかるかな?、じつは3だと8とおり、4だと16とおり・・・と、倍々ばいばいえていくんだ。
そして32あると、なんと42億通おくとおりのひかかたがあるのさ。正確せいかくには42おく9496まん7296とおりだけどね。
そりゃあかぞえられないわけだぜ。
そこで、このひかかた11普通ふつうかずっていくと、0から42おくまでのかずを32のランプのひかかたあらわことができるのさ、どう?ここまでは大丈夫だいじょうぶ
ものすげえかずだが、ようはひかかたごとに番号ばんごうるんだな?
そう!それで、このランプのことビットってうよ。32のランプは32ビットさ。そしてコンピューターはこのビットってやつを使つかってなんでもかんでも計算けいさんするんだ。
ランプのオンオフ、つまり0と1の2種類しゅるいかずだけ使つかうから、2進数しんすうっていうかたをするんだ。えるとコンピューターは2進数しんすう計算けいさんをしているってことだね。
さて、2進数しんすうはなしもすごく大事だいじだけど、今回こんかいはここまでにして、ここからはランプ1だけの計算けいさんかんがえよう。そこでてくるのが論理ろんり演算えんざんなんだよ。
ランプ1ってことはひかってるかひかってないだけじゃねえか。計算けいさんもへったくれもあるのかよ。
それがあるのさ!



計算けいさんだから、ランプ1と、もう1のランプをかんがえよう、そして計算けいさん結果けっかのランプもあるよ。
普通ふつう計算けいさんは、ざんざん、かけざんざんの4つの計算けいさんがあるよね?論理ろんり演算えんざん、つまりランプとランプの計算方法けいさんほうほうもそれとているよ。最初さいしょはへんてこりんにえるけどれればなんてことはない。
まずANDアンドランプが両方りょうほうついているときだけ、計算けいさん結果けっかのランプもつくんだ。どっちか一方いっぽうえてたり、両方りょうほうえてたら、計算けいさん結果けっかランプもえるよ。
えーと、数字すうじえると、1 ANDアンド 1は10 ANDアンド 1は0ってことかな?
そう!いいね!








つぎORオア。これはランプがどちらか一方いっぽうでもついていたら、計算けいさん結果けっかランプもつくんだ。結果けっかランプがえるのは両方消りょうほうきえてるときだけだよ。
うう、つ、つまり、1 ORオア 0は10 ORオア 1も1で、0 ORオア 0は0、か?
そうそう!きみたちはやっぱりプログラミングのセンスがあるよ!








つぎNOTノット。これはランプ1だけ。ひかかたをひっくりかえ計算けいさんだよ。NOTノット 0が1に、NOTノット 1が0になるんだ。








ちなみに日本語にほんごではANDアンド論理ろんりせきORオア論理ろんりNOTノット論理ろんり否定ひていうよ。名前なまえとおANDアンドはかけさんORオアさんてるんだ。
まとめると、ANDアンドはビットのかけさんORオアはビットのさんNOTノットはなんだかマイナスつけるっぽいかんじ?
そうだね。この3つの計算方法けいさんほうほう組合くみあわせるだけで、いろいろな計算けいさんができるんだ。
ランプ1計算けいさんができることはわかったぜ。0と1だけだからカンタンだしな。でも0と1だけ計算けいさんできてもなんのやくにもたねえんじゃねえのか?
ここからが本番ほんばんさ。



はなしぶけど、IFイフぶんってあるよね?
ハナシをごまかすんじゃねえ、IFイフぶんとランプってなんの関係かんけいもねえだろう。
ワンパクくんIFイフぶんってなにをするんだったっけ?
ナニー!てめえひと話聞はなしきいてねえのかよ!IFイフぶんなんて、正解せいかいならTHENゼンからさき実行じっこうする、間違まちがってたら実行じっこうしない、ランプと全然関係ぜんぜんかんけいねームキー!
それで、さっきボクがったことおぼえてるかな?コンピューターは全部ぜんぶ計算けいさんを0か1、つまりビットでやるんだよね?てことはIFイフぶんもビットでやってるんだけど、どうやるとおもう?
へ・・・?
あ・・・
ちょっとてよ・・・条件じょうけん正解せいかいなら実行じっこうする、間違まちがってたら実行じっこうしない・・・ビットっつうかランプ・・・ついてたら実行じっこうする、えてたら実行じっこうしない・・・!
フフ、もうすこしかな?
正解せいかいだとランプがつく、間違まちがってるとランプがえるとすれば、正解せいかいだとランプがついて実行じっこうする、間違まちがってたらランプがつかないから実行じっこうしない・・・
つまり、条件じょうけん正解せいかいかどうかでランプがついたりえたりして、IFイフぶんそのランプをTHENゼン実行じっこうしたりしなかったりする!
正解せいかい
ビットでえると、IFイフぶん条件じょうけん結果けっかを、正解せいかいなら1、間違まちがってたら0っていうふうに解釈かいしゃくするんだ。そして、条件じょうけん結果けっかが1だったら正解せいかいだとおもってTHENゼン実行じっこうするんだよ。
IFイフぶん条件じょうけんのところで==とか<とかくだろう?あれはじつあたいおなじなら1、ちがったら0だったりみぎあたいほうおおきかったら1、そうじゃなかったら0っていう意味いみなんだよ。そしてその結果けっかTHENゼン実行じっこうしたりしなかったりする。これがIFイフぶんなかでコンピューターがおこなっていることなんだよ。
IFイフぶんも0と1だけでうごいてるのはわかったぜ。でもANDアンドORオアはどこったんだ?
じゃあ、またはなしぶけど、15しょうたまときIFイフ文覚ぶんおぼえてるかな?
うおーまたびやがって!おぼえてるぜ!マリョリョ・・・
IFイフぶんなかIFイフぶんいてたやつだよね?

  'まずたまがないことをチェック
  IF TAMA==0 THEN
   'つぎにボタンをチェック
   IF BUTTON(1,#B_RRIGHT)==1 THEN
    'たまはっしゃ!
   ENDIF
  ENDIF

これこれ。
これ、じつIFイフぶん1けるんだ。
リョリョ・・・へ?
日本語にほんごでこのコードを説明せつめいするとたまがなくて、ボタンがされていたら、弾発射たまはっしゃだよね?
これをランプにえてみよう。ボタンがされたらランプがく、たまがなかったらもう1ランプがくってかんがえたら、どうなる?
ランプが2ついたら、たま発射はっしゃ、かな?あれ?なんかいたことあるような・・・
ANDアンドじゃねえか!ランプが2個付こついたら、計算けいさん結果けっかのランプがつく!
そう!つまりたまがない ANDアンド ボタンがされているってこと!
これをBASICでくとこうなるんだ!

 IF TAMA==0 && BUTTON(1,#B_RRIGHT)==1 THEN
  'たまはっしゃ!
 ENDIF

IFイフぶんなかANDアンド&&ってくよ。&&両側りょうがわ結果けっかが1だったら、つまりどっちも正解せいかいなら、THENゼン実行じっこうっていうことになるよ!
な、なるほど、ANDアンドIFイフがこうつながるわけか。
でもよう?IFイフぶんふたつ組合くみあわせればいままでだってけたわけだよな?ANDアンドだのORオアだのわざわざややこしい説明せつめいをしたってことは、変数へんすうときおなじなにかウラがあるんだろう。
フフ、まだORオア出番でばんてないしね!IFイフぶんにしただけじゃ絶対ぜったいけないことをやってみよう。Aボタンだけじゃなく、Xボタンでもたま発射はっしゃしたいとおもったらどうする?「たまがないときに」はいったんはずして、ボタンだけでかんがえてみて。
うう、全然ぜんぜんわからねえ・・・
まず日本語にほんごいてみよう!Xボタンは#B_RUPだよ!
ええと、B_RRIGHTがされたか、B_RUPがされたかしたら、タマ発射はっしゃか。
IFイフぶんだけでくぜ。ええと、ええと・・・ダメだ、けねえ・・・
このアレしたかソレしたかのどっちかっていうのに使つかうのがORオアなんだよ!
B_RRIGHTがされた ORオア B_RUPがされたってことか?
正解せいかい!じゃあそこにたまがないってのをしてみようか。
さっきのANDアンドをくっつけりゃいいんだろう?タマがない ANDアンド B_RRIGHTがされた ORオア B_RUPがされただな。
おしい!ORオアANDアンド両方出りょうほうでてきたときは、ANDアンドさき計算けいさんされるんだ。さんとかけさんざっていたらかけさんさきにやるのとおなじだね。そういうときにさんさきにやる方法ほうほう算数さんすうでならったはず!
かっこか!タマがない ANDアンド (B_RRIGHTがされた ORオア B_RUPがされた)ってことだな!
正解せいかい
プチコンをはじめるまえはかっこなんて使つかえなかったのにね。
神崎かんざき、そろそろオレのイエローカードがてくるぞ。
じゃあそのままプログラムにしてみてよ!IFイフぶんなかではORオア||ってくよ!
よし・・・

 IF TAMA==0 && (BUTTON(1,#B_RRIGHT)==1 || BUTTON(1,#B_RUP)==1) THEN
  'たまはっしゃ!
 ENDIF

こうか!
正解せいかい
まとめるよ。論理ろんり演算えんざん使つかうと、IFイフぶん条件じょうけんをいくつも組合くみあわせて複雑ふくざつ条件じょうけんにできるんだ。ANDアンドIFイフぶんなかだと&&だね、これはふたつの条件じょうけん両方正解りょうほうせいかいだったら、ORオア||、これはふたつの条件じょうけんのどちらか、もしくは両方正解りょうほうせいかいだったら、NOTノット今回出こんかいでてこなかったけどIFイフぶんでは!いて、使つかうと正解不正解せいかいふせいかいをひっくりかえせるよ。
&&||!かたひとによってまちまちだけど、ボクはそれぞれアンドアンドオアオアノットってんでるね。!正式せいしきにはエクスクラメーションマークってうんだけどプログラムのなかでちゃんとそうよむひとすくないんじゃないかな。あ、ハカセはビックリってんでたよ。
そして大事だいじなのは、IFイフぶん条件じょうけん正解せいかいかどうかってのも、コンピューターのなかではビットが0か1かっていうこと計算けいさんしてるってことさ。複雑ふくざつ条件じょうけんいたときも、それぞれの条件じょうけんが0か1かにわって、そしてそのあいだANDアンド,ORオア,NOTノットなんてのを使つかって、最終的さいしゅうてきに0か1かになるっていうことだよ。
この物事ものごとを0か1かのビットのカタマリであつかというのを、デジタル処理しょりうぞい!いまのコンピューターはあらゆることを0か1かのデジタルデータとして処理しょりするから、デジタルコンピューターうんじゃ!
余談よだんになるが、全部ぜんぶ0か1じゃなくて、0.5とか1.33とかもあっていいんじゃない?という処理しょり仕方しかたアナログ処理しょりうんじゃ。そしてなんとアナログコンピューターというのもあるんじゃよ。ちょうウルトラレアキャラじゃがのう。わしも実物じつぶつたことがない!
さて、デジタル、つまり物事ものごとを0か1のカタマリで処理しょりするとなにいのかというと、ビットの計算けいさん基本きほんは、論理ろんり演算えんざんなんじゃ。さん、かけさんさんなんてのも、じつ論理ろんり演算えんざん組合くみあわせておこなえるんじゃ。たった3つのカンタンな計算けいさん組合くみあわせるだけで、ありとあらゆる計算けいさんができるというのがデジタルのすごいところなんじゃよ。
じつはコンピューターのなかには、ものすごいちいさいランプがものすごくたくさん、何億個なんおくこ何十億個なんじゅうおくこはいっていて、そしてそのランプを論理ろんり演算えんざん計算けいさんする仕組しくみもものすごくたくさん、何億個なんおくこ何十億個なんじゅうおくこはいっているとおもえばええ!まあ実際じっさいのコンピュータにまれている「ランプ」はひからんがのう。
ランプのかわりに電気でんきまっていたら1、電気でんきがなかったら0、ということにして、あらゆること電気でんきのある・なしにえて計算けいさんしとるんじゃ!ある・なしだけのデジタル計算けいさんするほうが、ちょっとだけあるとか、すごくたくさんあるとかのアナログ計算けいさんするよりずっとラクなんで、なかのほとんどのコンピューターはデジタルコンピューターになったんじゃよ。
そしてその論理ろんり演算えんざんのチカラをほんのちょっとりて、今回こんかいIFイフぶんなんかでややこしい条件じょうけんけるということまなんだわけじゃ。
それで、論理ろんり演算えんざん基本きほん計算けいさん方法ほうほうが3種類しゅるいしかないカンタンなものなんじゃが、実際じっさいにややこしい条件じょうけんをこの3つの計算けいさん組合くみあわせにえるというのが、最大さいだい難関なんかんなんじゃよ。そこはいろいろなパターンや法則ほうそくおぼえて、経験値けいけんちすこしずつげていくしかない!まあいつもっとるとおり、あせらずすこしずつおぼえていけばええぞい。



{今回:こんかい}のポイント

ビットについて

Switchスイッチはもちろん、いまなかにあるスマートフォン、タブレット、パソコンなどのコンピューターはほとんどすべてデジタルコンピューターです。デジタルとは、データをすべて0か1のビットのかたまりとしてあつかこと意味いみします。Switchスイッチなかのコンピューターはビットを32、または64のかたまりであつかいます。

論理演算

コンピューターのなかではデジタルデータの計算けいさんANDアンド,ORオア,NOTノットのたった3種類しゅるい論理ろんり演算えんざん複雑ふくざつ組合くみあわせでおこなっています。ANDアンド,ORオア,NOTノットそれぞれの計算内容けいさんないよう本編ほんぺん挿絵さしえください。ANDアンドはビットのかけさんORオアはビットのさんNOTノットはビットをひっくりかえ計算けいさんだとおもうと理解りかいしやすいです。

{条件式:じょうけんしき}での{論理:ろんり}{演算:えんざん}

IFイフぶんなどで条件式じょうけんしき場合ばあい論理ろんり演算えんざん使つかって複雑ふくざつ条件じょうけんことができます。ANDアンド&&ORオア||NOTノット!使用しようします。かっこも使用しようできます。
しきなか&&,||,!使つかわずにANDアンド,ORオア,NOTノットこともできますが、そうするとしきちが意味いみになるので注意ちゅういしてください。SmileBASICスマイルベーシックなかANDアンド,ORオア,NOTノットいたときなんこるかはべつしょう説明せつめいします。



さて、論理ろんり演算えんざんすこれてもらうために、練習問題れんしゅうもんだいしておこうかの!
その1:PRINTぶんがあるじゃろ?あれで論理ろんり演算えんざん結果けっかもチェックすることができるんじゃ。たとえば? 1 && 0とやれば1 ANDアンド 0の計算結果けいさんけっかてくるし、? 1 || 1とやれば1 ORオア 1の計算結果けいさんけっかてくる。NOTノットおなじじゃ。? !1とやったらなんてくるか実際じっさい確認かくにんしてくれい!そうそう、? A==0とかいて、IFイフぶん条件じょうけん正解せいかいかどうか簡単かんたん確認かくにんできるぞい。おぼえておくとIFイフぶんのデバッグに便利べんりじゃ。
その2:簡単かんたんなプログラムをつくってくれい!0から9までのかずで、3以上いじょう5以下いかかずだけPRINTぶん出力しゅつりょくするんじゃ。0から9までというのはFORフォーぶん使つかってFOR I=0 TO 9とかやればいけそうじゃのう。あとIFイフぶんPRINTぶんじゃ。FORフォーぶん変数へんすうIなら、3以上いじょうI>=3、5以下いかI<=5けるな。ふたつの条件じょうけん同時どうじ正解せいかいかどうか調しらべる方法ほうほう今回こんかいやったのう!3 4 5の3つのかずてくれば正解せいかいじゃ!
その3:まえ問題もんだいぎゃくパターンもつくってみようかの。0から9までのかずで、3よりしたまたは5よりうえかずだけPRINTぶんすんじゃ。3よりしたI<3、5よりうえI>5じゃ。あとはわかるな?0 1 2 6 7 8 9と7かずてくれば正解せいかいじゃ!
その4:その2とその3ができた人向ひとむけの上級問題じょうきゅうもんだいじゃ!じつはその3じゃが、その2のプログラムに3文字足もじたすだけでできるんじゃ!足す文字もじ!,(,)じゃ。どうすればいいじゃろうな?ヒントはその3の説明せつめい最初さいしょその3は1その2のぎゃくバターンじゃ。条件じょうけん正解せいかい不正解ふせいかいをひっくりかえ方法ほうほうがあったじゃろう?