#pragma twice

KAB-studio > プログラミング > #pragma twice > 017 Version 2.6 便利なものいろいろ!

#pragma twice 017 Version 2.6 便利なものいろいろ!

前のページへ 表紙・目次へ 次のページへ

 Version 2.6
便利なものいろいろ!

前回は while を使ってみました
あれは便利よねー、面倒な繰り返しが簡単にできちゃうんだから
今回まず、そのための便利なものを紹介しましょー
便利づくしねー
まず<っていう演算子を紹介しましょう
だいなり、ってヤツ?
そ。とりあえずこれ試してみ?

void CCalcDlg::OnBEqual() 
{
    TRACE( "3 < 5 : %d\n", 3 < 5 );
    TRACE( "5 < 3 : %d\n", 5 < 3 );
}

はーい。ビルドして実行っと……

3 < 5 : 1
5 < 3 : 0

? 変な結果
3と5でどっちが大きい?
そりゃ5に決まってるじゃない
じゃ、3<5は合ってる?
合ってるに決まってるじゃない
それじゃ5<3は?
これは間違いよね
そういうこと
どーゆーこと?
よーするに合ってたら1になって、間違ってたらゼロになるってこと
1になるとか、ゼロになるとかって?
こういうことかな

void CCalcDlg::OnBEqual() 
{
    TRACE( "3 < 5 : %d\n", 1 );
    TRACE( "5 < 3 : %d\n", 0 );
}

 3 < 5 っていうのがあったら、プログラムはこれを調べて、合ってたら
1になって、間違ってたらゼロに置き換わるってこと
置き換わるってよく分かんないけど……
ほら、この前こういうの見たでしょ

    iBox = iBox + 200;

前々回だっけ
このときは、まず

    iBox = 100 + 200;

に置き換えるって話したでしょ。こういうふうに置き換わるってこと
置き換わるっていうより、みなす、ってこと?
そういうことかな。<があったら、その左右を比べて、合ってたら1に、
間違ってたら0になっちゃうわけ
ふーん……
じゃ、問題
ええ?
これ使って前回の 1 から 5 までっていうの、やってみ?
う”、難しそう……
この前の〈ずっと繰り返される〉っていうの、こうだったよね

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( 1 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

 TRACE() で5を出力した、で while に戻った。そのとき while がゼロ
になるようにすればいいんだから?
これで < を使うのよね…… iBox < 5 とかできる?
もちろん
ってことは、 iBox の中が0から4の時は 4 < 5 で、これだと1になる
から while の次は中カッコの中
うんうん
もし iBox の中に5が入ってたら、 5 < 5 だから、これ間違いだから、
これがゼロになって…… while がゼロになる! これでストップ!
そういうこと! じゃ、実際に書いてみると?
 1 を iBox < 5 に置き換えればいいだけよね……

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

書き換えてビルドして実行して……やったー! ちゃんと5回で止まっ
たよ!
こういう演算子と、 while を組み合わせるだけで色々できるってことが
分かった?
うん、便利だねーこれ
じゃ、これに似た演算子も紹介しようか
似たって、> とかってこと?
そ。> は < の逆
ってことは 3 > 5 でゼロ、ってことね
次に <= と >= 。これはつまり、現実世界だと……
<   >
= と =
のことだね
 5 < 5 だとゼロだったけど、 5 <= 5 だと1、ってことよね
そういうこと
ねーねー、ただの=ってないの? 代入の記号でいいの?
違うんだね、これが。〈同じかどうか〉の演算子は、==を使うんだわ
イコール、ふたつ?
そ。ま、これは憶えちゃうしかないかな
変数に入れるのは=、ホントの意味の〈同じ〉っていうのが==、ね
あと!=っていうのもあるよ
なに、これ
==の逆。 5 == 5 なら1だけど、 5 != 5 だとゼロなんだわ
ってことは 3 == 5 ならゼロだけど、 3 != 5 だと1ってこと?
そういうこと。もうひとつこれに似たの、それは!
それは?
いや、そーじゃなくって、〈 ! 〉っていう演算子なんだわ
あー、!=の!ね
そ。これは、ゼロのものを1にして、ゼロ以外のものをゼロにします
ん?
たとえばこれ

void CCalcDlg::OnBEqual() 
{
    TRACE( "3 < 5 : %d\n", !( 3 < 5 ) );
    TRACE( "5 < 3 : %d\n", !( 5 < 3 ) );
}

これ、今日最初のヤツよね。ビルドして実行っと……あ! 逆!

3 < 5 : 0
5 < 3 : 1

こんなふうに〈逆にする〉ことができるから、これを使えば < とかも逆
のができるってことだね
……なんか頭こんがらがっちゃいそう
それは言えるね。だからね、自分なりにひとつの型を作っとくといいかな
どういうこと?
たとえば、さっきのプログラムはこう書き換えられるでしょ

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox != 5 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

あ、そうよね、iBox の中が 5 になったときに、 while がゼロになれば
いいんだから
同じく

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( !( iBox == 5 ) )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

よーするに、!=は!と==に置き換えられるってことよね
あとこういうのもあるよ?

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox <= 4 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

これも、5になったらゼロになるんだ……
さ・ら・に

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( !( 5 <= iBox ) )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

もう、もうやめてっっ!! 頭が、頭が
悪い?
悪くないっ! でもホントに悪くなっちゃいそ……
だから、自分で使うときにはひとつに統一した方が分かりやすくなると思
うよ
統一って、 < だったら < ばっか使うってこと?
全部にってわけじゃないけど、たとえばこの〈5まで〉とかならね
ま、言われなくてもするけどね
そう?
何よ、どういう意味よ
実際に統一してくのは難しい、ってこと。ま、そのうち分かるけどね
なんかムカツクなー
あともうちょっといいかな
うん、今日これまでって、 <, >, <=, >=, ==, !=, ! しか教えてもらっ
てないし、どれも似たようなのだし
そだね。でもさ、!ってちょっと違ったでしょ
そういえば…… < とかって、左と右を比べるのでしょ。でも!って右だ
けだよね
この!みたいな、ひとつの数字だけやひとつの変数だけをチェックする演
算子を〈単項演算子〉って言います
たんこーってゆーと、酸素含有率アップでどかーんって
そりゃ炭坑や! 〈項〉っていうのは……
どったの?
……よーするに〈 項 == 項 〉とか〈 !項 〉とか見れるわけで……
しっかりやんなさいよー、センセなんでしょー!?
う”……要するに〈チェック項目〉の〈項〉かな。==だったら左と右が
チェックする項目で、!だったら右側だけがチェックする項目
この項目がいっこだけだから、単項演算子、ってこと?
そゆこと。他の==とかは2項演算子っていいます
よーするに種類としてそういうのがあるってことよね
そうだけど、本とかにこういう用語が使われてるから、知っておくと便利
だから。ちなみに〈項〉は英語で言うと "operand"(オペランド)って言う
から
なんか猟奇的な世界ね
いきなりボケ激しいっすね……ちなみに "operand" って〈被演算子〉っ
て意味らしいよ
まんまねー
で、今日最後は4つの単項演算子を憶えてもらいたいと思います
4つも!?
大丈夫、そんなに難しくないから。これ試してみて

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        ++iBox;
        TRACE( "%d ", iBox );
    }
}

あ、結果同じー
 ++ っていう単項演算子は、くっついてる変数を1増やす、っていう機能
を持ってるわけ。つまり iBox += 1; と同じってことだね
へー、これ便利そう。ってことは -- もあるってこと?
そういうこと。で、実はこんなのもあります

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( !( 5 <= iBox ) )
    {
        iBox++;
        TRACE( "%d ", iBox );
    }
}

あ、今度は後ろに付いてる……あれ? でも結果同じだよ?
というわけで、次回に続く!

/*
    Preview Next Story!
*/
今日は結局、演算子見ただけね
こーゆーのが大事ってことかな。次回はちょっと違う話
どんな話かな……な、何これ!
まぁ、たまにはこういうことも、あるよね……
というわけで次回
< Version 2.7 短いことはいいことだ? >
につづく!!
次の話、ええ話や……
まあそうかも
でもムカツク!
げげ
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。