
/*
    KAB-studio.h
        　ＫＡＢ−ｓｔｕｄｉｏで先週更新した内容
        が格納されたヘッダーファイルです（笑）。

    (C)KAB-studio 1999 - 2000 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2000/05/01(Mon) No.055
    配信数： 3640（ Mag2 + Pubzine ）
＊    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/

/*            辞書の単語登録追加休止期間を延長します              */

　プログラミング辞書の単語追加の休止期間を、これまで「５月中旬まで」
とアナウンスしていましたが、それを「６月一杯」に延長します。
　相変わらず就職が決まらず、授業などもかなり忙しい状態のため、主な更
新は土日にしかできない状況です。また、辞書の単語登録申請がここ最近非
常に増えていたこと、単語の追加が結構手間取ることなどから、辞書の更新
はかなりの負担になるという現状があります。そのため、少なくとも就職先
が決まるまでの間は、辞書の単語登録申請は受け付けないことにすることに
しました。御了承ください。

[プログラミング辞書]
http://www.kab-studio.com/Programing/Dictionary/


/*                ２０００年５月１日（月）の更新                  */
http://www.kab-studio.com/Info/News/

・表紙を５月バージョンに！
　毎月恒例、新しい表紙です。
　今回は５月５日こどもの日とゆーことで鎧武者風にしてみました。出来
は……うーむ、時間が掛かった割りには（汗）。来月またがんばりたいです
な。このイラストについての解説はチョー普通な日記４月２３日をご覧くだ
さい。

[チョー普通な日記２０００年４月２３日]
http://www.kab-studio.com/cgi-bin/cgiperl7.pl?nikki2/n12_04b.html__s__20000423


・「鏑矢正伝の基本事項」更新。
　鏑矢正伝の基本事項の顔写真を新しいものにしました。それだけ（汗）。

[鏑矢正伝の基本事項]
http://www.kab-studio.com/cgi-bin/cgiperl7.pl?Info/Kaburaya/Kihon.html


/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2000/04/23 (Sun)
　５月表紙完成！　しかし出来は……。んでも時間掛かって凝ったの作れた
のは良かったかも。あと４コマのテストとかテレビとか。

2000/04/24 (Mon)
　超ヒット！　なぜかうちかぶとかのヒット数が増大。それ以外はいいとこ
なし（汗）。

2000/04/25 (Tue)
　写真撮ってゼミ行って飲み会行ってって感じ。わたしはー、ひんこーほー
せーなー、おとこなのよー（裏声）。

2000/04/26 (Wed)
　明日持っていくための履歴書を書いたり。初めて書いた（汗）。丁寧に字
を書くのって大変ですね。

2000/04/27 (Thu)
　そして NJK の就職説明会へ！！　とーとー始まった就職活動！　スーツ
着て革靴はいて天下一品ラーメン食べる日々が今始まる！！＜ってゆーか遅
すぎ。なんにせよ疲れた……。

2000/04/28 (Fri)
　人気大爆発の天下一品ラーメン略して天一。君はもう食べた？　ってゆー
か食べたの遅すぎですかわて？　そしてキクヒメ様〜！

2000/04/29 (Sat)
　とーとー長髪＆短髪写真を公開！　この変わり様はもはやコスプレの域！
そしてふたたび天一ネタ。


/*                         鏑矢の憂鬱                             */
http://www.kab-studio.com/Programing/KabuU/

2000/04/23 (Sun)
お休み

2000/04/24 (Mon)
情報理論
エントロピー
辞書の順番で木ができる
宿題しないと

2000/04/25 (Tue)
情報処理論
最適化問題の解き方
ヒープ
std::make_heap() とかと関係あり？

2000/04/26 (Wed)
信号処理論
そろそろプログラム組まないと
お便り
プロパティシートが小さくならない
実は最小サイズが決まっている
プロパティシートはコモンダイアログのひとつ
小さくするには自作するしか

2000/04/27 (Thu)
NJK の就職説明会に行く
ホームページでプログラミングについてのドキュメントを公開している会社
これはすごいこと
閉鎖的でないことに魅かれた
入れるかどうかは不明（汗）

2000/04/28 (Fri)
お休み

2000/04/29 (Sat)
プログラミング辞書のことについて
単語の追加は結構大変
知らない単語は調べないと書けない
知ってる単語は書く量が増えて大変
でも書いていて楽しい
トレーディングカードをコンプリートしてく気分
人気も高いし
早く復活させたい


/*             プログラミング辞書・今週の追加単語                 */
http://www.kab-studio.com/Programing/Dictionary/

・追加単語：
バインド ジオメトリ コネクション

・今週のごめんなさい
handle TCP/IP ATL

　前述の通り、単語追加申請はもう少しの間お休みしたいと思います。追加
単語のストックももう尽きちゃったんで、ここのコーナー、お休みするかも
しんない……。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『なんだかんだ言ってさ、購読登録数少ないよね、それ』
「なんだかんだ言っても、上級者向けだからかなー」
『まずあたしがそのレベルに追いつかないとね』
「そしたらいっぱい増えるかなぁ」
http://www.kab-studio.com/Programing/STLiostream/
_______________________________________________________________[KCM]


/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 4.05
ビット操作

「前回は２進数ってものについて紹介しました」
『なんかパズルみたいだったよねー』
「今回は、そのイメージをもっとしっかりしたものにしようと思います。え
っとまず、用語について。ビットって知ってる？」
『聞いたことはあるけど、よくしんない』
「ビットって言うのは、２進数で表示したときの〈桁の数〉。だから 00 な
ら２ビットね」
『あー、じゃー 0101 なら４ビットってこと？』
「そゆこと。つまり４ビットで１６進数１桁ってことだね。さて次。 0001 
を１６進数で言うと？」
『 1 だよ』
「じゃ 0010 は？」
『えっと、 2 だね。ついでに言っとくと 0100 は 4 で 1000 は 8 だよ』
「そうそう、 8421 ってなってるからね。で、 0001 を〈ずらして〉 0010
にすることを〈ビットシフトする〉って言います」
『びっとしふと？』
「そう。〈シフト〉っていうのは〈ずらす〉って意味。ビットをずらすわけ」
『ってことは 0010 をビットシフトすると 0100 になるの？』
「そゆこと。あと左方向じゃなくて右方向にもシフトできるよ」
『できるよ、ってのは？』
「あー、そういうことがプログラムでできるってこと。やってみようか」

void BitShiftLeft()
{
    char ch = 0x01;    // 00000001
    for( int iF1 = 0; iF1 < 4; iF1++ )
    {
        TRACE( "%X ", ch );
        ch = ch << 1;    // ここ。
    }
}
// 1 2 4 8 

『むむ、なんか難しそう』
「ひとつひとつね。まず char 型の変数を作って、 00000001 を入れます」
『 char って数字入れるのだもんね。で、 for だから繰り返しね』
「そう、４回繰り返し。繰り返すのは、 ch を１６進数として表示するとこ
と、 << 演算子を使うこと」
『これ初見！』
「この << を使うと、左方向にビットシフトします」
『あ、これがさっき言ってた〈できる〉ってことね』
「 << 演算子は、左の数字を、右の回数だけずらします」
『この例だと１回だけずらすんだ。２回ずらすって、 0001 が 0100 になる
ってこと？』
「そういうこと。で、ここでは１回ずつずらしてるから、 ch の中身は 0001
0010 0100 1000 っていうふうにひとつずつずれていくわけ」
『だから結果が 1 2 4 8 ってことなんだ。でも当たり前よね』
「そう、そこが大事！」
『な、なに？』
「前も言ったけど、ビットそのものを直接見ることはできないわけ」
『あー、この例だと ch を 0001 みたいに表示できないってことね』
「そうそう。だから１６進数で表示してイメージ沸かせるしかないんだけど」
『当たり前って思えるんなら、イメージがしっかりできてるってこと？』
「そういうこと。それが大事だから」
『ま、こういう例が見られればね』
「ちなみに今のは左シフト。右シフトは >> を使います」

void BitShiftRight()
{
    char ch = 0x08;    // 00001000
    for( int iF1 = 0; iF1 < 4; iF1++ )
    {
        TRACE( "%X ", ch );
        ch = ch >> 1;    // ここ。
    }
}
// 8 4 2 1 

『今度は 1000 0100 0010 0001 ってなってくんだ』
「そういうこと。じゃ、次に進みます。フラグって知ってる？」
『ゲームするときにときどき聞くね』
「フラグっていうのは〈しるし〉のこと。たとえば RPG とかで、ボスを倒
すとストーリーが変化したりするでしょ」
『よくあるパターンね』
「こういうとき〈フラグが立った〉って言います。フラグって英語で〈旗〉
って意味。ボスを倒した印として旗が立つ、ってイメージかな」
『オフサイドぴぴーみたいな？』
「そういうこと。で、実際にホントに旗が立つわけじゃなくて、プログラム
の中では〈変数の値が変わる〉ってことを印にします」
『たとえば int の変数作って、 1 ならまだ倒してない、 -1 なら倒した、
みたいな？』
「そうそう、そういうこと。それをもっと効率良くしたのが〈ビットフラグ〉
ってもの」
『ビットフラグ？』
「 0000 の各ビットって、基本的にスイッチでしょ」
『うんうん』
「だからたとえば〈一番右の桁が、 0 ならまだ倒してない、 1 なら倒した〉
みたいなフラグにすることができるわけ」
『 0000 なら倒してない、 0001 なら倒したってことね。でも他の３桁が無
駄じゃん』
「そこは別のフラグに使えばいいでしょ」
『あ、つまりこうすれば、 char なら……えっと、８個のフラグが使えるっ
てことなんだ！』
「そういうこと。これなら効率的でいいでしょ」
『うん、いいいい。で、どう使うの？』
「〈ビット和演算子〉ってものを使います」
『びっとわ？　べべんべんべん』
「そりゃ琵琶や」
『ぶぶー三味線だもん』
「分かんないって。で話を戻すと、 1000 と 0001 を組み合わせて 1001 に
したいってときは、どうすればいい？」
『足せばいいんじゃない？　えっと、 8 と 1 だから足して 9 ！　うん、
やっぱ足せばいーよね』
「じゃ、 1001 と 0001 を組み合わせて 1001 にしたいときは？」
『あれ？　1010 になんないの？』
「それぞれの桁は別のフラグなんだから、繰り上がりしちゃダメでしょ。も
ともとフラグが立っているときにさらにフラグ立てようとしたら、そのまま
立たせとくってこと」
『つまり 0001 と 0001 組み合わせても 0001 ってことね。これは足し算
じゃむりね。そこでビット和！』
「そゆこと。ビット和演算子は | のこと。 Shift キー押しながら Back
Space の左のキーを押せば出てくるから」
『ほほー、こんなマイナーなものが……』
「では試してみましょう」

void BitSum()
{
    char ch
        = 0x08     // 00001000
        | 0x01;    // 00000001
    TRACE( "%X\n", ch );
    // 9
    // つまり 00001001

    ch
        = 0x09     // 00001001
        | 0x01;    // 00000001
    TRACE( "%X\n", ch );
    // 9
    // つまり 00001001
}

『んーと、 char の変数 ch を作って、数字入れてるね』
「ここで、 1000 と 0001 を組み合わせた結果を ch の中に入れてます」
『その〈組み合わせ〉をするのが | ってことね。で結果が 1001』
「つまり | を使うと特定のビットだけを 1 にすることができます」
『〈特定のビット〉を変えるときって、 0001 を 0010 や 0100 にすればい
いってことだよね』
「そういうこと。で、その次に 1001 と 0001 を組み合わせてます」
『足し算なら 1010 になっちゃうけど、ビット和だから 1001 なんだね』
「ビット和が各ビットを操作できるってことが分かったね。ちなみにビット
和、実は前に使ったことがあるんだよ」
『ええっ！？　ど、どーりでどっかで見たよーな気が』
「してないでしょ。 Ver 2.11 （ No.022 ）で、こんなふうに使ってます」

    MessageBox( "あいうえお", "かきくけこ"
                , MB_YESNO | MB_ICONQUESTION );

『あ、これダイアログ表示するのだよね。 MB_YESNO って【はい】と【いい
え】のボタンを付けるので、 MB_ICONQUESTION ってアイコンをはてなマーク
にするのだよね』
「そうそう。こういう〈状態を渡す〉ときは、たいがいこういうふうにビッ
ト和で渡します」
『つまり MB_YESNO とかがビットフラグになってるってことね』
「そういうこと。じゃ、今日最後は、 & について」
『 & って〈アンド〉だよね』
「ま、それは考えない方がいいかな。 & もビット操作をする演算子。ま、
とりあえずこれを試してみて」

void BitMultiply()
{
    char ch
        = 0x01     // 00000001
        & 0x08;    // 00001000
    TRACE( "%X\n", ch );
    // 0

    ch
        = 0x09     // 00001001
        & 0x08;    // 00001000
    TRACE( "%X\n", ch );
    // 1
    // 00001000
}

『えっと、上は 0 、下は 1 』
「 & は、ビットが両方とも 1 だと 1 に、それ以外は 0 にするって演算子。
上は、どのビットも合ってないでしょ」
『あ、下は右から４ビット目が両方とも 1 だから、そこだけが 1 になって
るんだ。でもこれって使えなくない？』
「これはね、フラグが立ってるか立ってないかをチェックするの」

void CheckBitFlag( char p_ch )
{
    if( p_ch & 0x1 )    // 00000001
    {
        TRACE( "赤" );
    }

    if( p_ch & 0x8 )    // 00001000
    {
        TRACE( "青" );
    }
    
    TRACE( "\n" );
}

void SendBitFlag()
{
    CheckBitFlag( 0x1 );
    // 赤
    CheckBitFlag( 0x8 );
    // 青
    CheckBitFlag( 0x1 | 0x8 );
    // 赤青
}

『あ、 if って 0 以外だと {} の中に入るんだもんね。 & で立ってるかど
うか調べられるんだ』
「こうすることで、ひとつの変数にいっぱいのフラグを格納できるってわけ
だね」

/*
    Preview Next Story!
*/
『でもさ、フラグってホントは〈フラッグ〉じゃないの？』
「そういえばそうだね……」
『ねー〈ビットを 0 にする〉のはどうすればいいの？』
「そんなめったに使わないの憶える必要ないよ……」
『なんか投げやりー』
「というわけで次回」
＜ Version 4.06 正と負！ ＞
『につづく！』
「業界には不思議なことが多いしね……」
『何黄昏てんのよ』


/*                       金菜さんの憂鬱                           */
http://www.kab-studio.com/Programing/KanaU/
（ごめんなさい、現在休止中です。もちっとまってね）


/*              ２０００年５月８日（月）の更新予定                */
http://www.kab-studio.com/Info/News/

・予定なし（汗）。
　もー今かなり忙しいって感じなんで、当分まともな更新はできそうもない
です（泣）。まー日記とかかぶゆ〜はもちろん更新するんでそっちでね。


/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・プログラミングに関する質問は[鏑矢の憂鬱]にお送りください。
http://www.kab-studio.com/Programing/KabuU/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://bigbeat.tegami.com/~mgsearch/frame.cgi?id=0000012198
http://www.kab-studio.com/Freeware/

/*
    KAB-studio.h
    Weekly Mail Magazine.
    Written by Kaburaya Seiden.

    (C)KAB-studio 1999 - 2000 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/


/*                      See you next week!!                      */


