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

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

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


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

・更新なし。
　まー当分はこれが続きますね、とほほ。


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

2000/04/30 (Sun)
　ソフトパステルを使ったイラストを掲載。メタスラのフィオです。んでも
スキャンすると質が（汗）。やっぱ投稿するかなー。

2000/05/01 (Mon)
　ゲームしてないのに LFTCGVF 購入。グループ面接へ！　そして慌てて書
類申請。詰め甘いっす〜。

2000/05/02 (Tue)
　書類はあっさり集まりました。あとホワイトボード大活躍。

2000/05/03 (Wed)
　STL & iostream 入門が送信エラーで大慌て。少し遅れたのはそのせいで
す。あとはテキトー。イラスト描いたり。

2000/05/04 (Thu)
　テレビ見つつのんびりー。

2000/05/05 (Fri)
　メダロット＆コレクター・ユイ！　いやーアニメってホントいーですねー。

2000/05/06 (Sat)
　今日はゾイド！　いやーアニメってマジいいっす。あと PRIDE2000 など
など。


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

2000/04/30 (Sun)
お休み

2000/05/01 (Mon)
情報理論
ハフマン法
有名な圧縮法らしい

2000/05/02 (Tue)
情報処理論
ネットワークグラフのデータ構造
２次配列の方がいいような
最適化問題の宿題
アルゴリズムはやっぱり苦手

2000/05/03 (Wed)
お休み

2000/05/04 (Thu)
ぷらとわ書き
バイトオーダーについて
メモリウィンドウが便利
このあとはポインタ
アドレスの操作を中心に見るつもり

2000/05/05 (Fri)
ぷらとわ書き
定数について
#define と const そして enum 
enum をビットフラグに使っている人は少なそう
最新のものだけ教えるわけにもいかない

2000/05/06 (Sat)
ぷらとわ書き
ポインタについて
メモリの閲覧
デバッガまわりが強力だから VC は教えやすい
理由をしっかり書ける
「できるようになるまでの時間」は多いけど
VC って魅力ないのかも


/*             プログラミング辞書・今週の追加単語                 */
http://www.kab-studio.com/Programing/Dictionary/
（６月一杯まで更新を休止します、御了承ください）
　

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『ねー、あたしがこれ読んで理解できるようになるのっていつ？』
「もう少しすれば使えるようにはなるけど、理解できるようになるのは」
『もちっと先かー』
「……オチは？」
http://www.kab-studio.com/Programing/STLiostream/
_______________________________________________________________[KCM]


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

　Version 4.06
正と負！

「ビット編最後は〈正と負〉について」
『それってプラスとマイナスのこと？』
「そう。さて、まずはおさらいから。 char って１６進数何桁入るんだっけ」
『２桁だよ。 0x11 みたいな感じ』
「１６進数１桁は、２進数で何桁だっけ」
『４桁。 0x5 が 0101 みたいな。ってことは、 char は２進数８桁分って
ことだね、 01010101 が 0x55 で、えーっと…… 85 みたいに』
「そういうこと。それを踏まえて、次の関数を試してみましょう」

void BitShift8()
{
    char ch = 0x01;    // 00000001
    for( int iF1 = 0; iF1 < 8; iF1++ )
    {
        TRACE( "%d ", ch );
        ch = ch << 1;
    }
}
// 1 2 4 8 16 32 64 -128 

『あ、この前見たのと似てるね』
「この前は４回しかシフトしなかったけど、今回は８回、だから 00000001
から 10000000 までシフトする例」
『 00000001 が 1 で、 00000010 が 2 で、そのあと 4 8 16 32 64 -128
って、なんで 128 だけマイナスなの！？　あ、これがミソなんだ』
「そういうこと。 char の変数は、サイズが８ビット。どうがんばっても、
８ビット分の情報しか入らない」
『８ビットって、メモリの１マスだもんね。もしはみ出たら、他の変数にと
か邪魔しちゃうかもしんないもんね』
「単純に、 11111111 つまり 0xFF を１０進数に直すと？」
『 16 * 15 + 15 だから 255 だね』
「ってことは、 00000000 から 11111111 まで全部使うと、 0 から 255 ま
で表せるってことだ」
『そだね』
「マイナスはどうする？」
『あ、そういえば』
「〈この数はマイナスですよ〉っていう情報も、８ビットの中に入れなきゃ
いけないでしょ。それをどうするか」
『どうするの？』
「そこで、ビットひとつを〈プラスかマイナスかのフラグ〉にする、ってこ
とになります。そのフラグは一番左の桁。 00000000 だとプラス、 10000000
だとマイナスね」
『あ、 10000000 ってだから -128 だったんだ！』
「そういうこと。一番左の桁を正負のフラグにして、あとの７桁を数字を表
すのに使います」
『ってことは、正の数は 01111111 まで……だから 127 まで表せるってこ
とだね。う”、一気に半分になっちゃった』
「その分、マイナスも表せるってことだからね」
『……変よ！　なんで 10000000 が -128 なの？　-0 とか -1 とかなりそ
うなのに』
「 -0 はないでしょ。 -1 は 11111111 だよ。で、 -2 は 11111110 ね」
『えーっ！？　逆になるんだー、なんかわけわかんない……』
「分かんなくていいよ、これは計算する必要とかあんまりないから」
『そなの？』
「そなの。しっかり憶えて欲しいのは、一番左の桁が正負のフラグってこと」
『確かにこれは、知ってないと怖いよね』
「ちなみにマイナスの最大値は -128 だから」
『あー、 11111111 から減らしていけば 10000000 になって -128 になるも
んね。さらに減らすと 01111111 で 127 になっちゃうし』
「そういうこと。 char 型変数の中に入るのは 127 から -128 ってことだね」
『あ！　これが Ver 4.02 （ No.052 ）で言ってた〈 -128 から 127 の間
の数字しか、 char 型変数には入らないから〉の理由なんだ！』
「そういうこと。理由が分かるって大事だからね」
『うん、こーゆーの分かるのうれしいもん』
「さてさて、 char は 127 から -128 しか使えないけど、実は 255 から 0
まで使う方法があります」
『それって一番左の桁を正負のフラグに使わない、ってことだね？』
「そゆこと。そういうのを〈符号なし整数値〉って言います」
『プラスだけなんだ』
「限界ギリギリの数字を使いたいときや、純粋にビットフラグだけとして使
いたいときによく使われるかな。じゃ、まずこれから」

void Normal()
{
    char ch = 255;
}

『あ、ビルドしたらエラー出た』

warning C4305: 'initializing' : 'const int'から'char'へ切り詰めます。
warning C4309: 'initializing' : 定数値が切り捨てられました。

「エラーじゃなくて警告だね。一応 char 型に 255 は入るんだけど、 char 
の範囲内じゃないから切りつめられちゃうわけ」
『だから〈あかんよー〉って言ってるんだ』
「では次」

void Signed()
{
    signed char ch = 255;
}

warning C4305: 'initializing' : 'const int'から'char'へ切り詰めます。
warning C4309: 'initializing' : 定数値が切り捨てられました。

『同じエラー出た。あれ、 signed って？』
「これは〈さいんど〉って読みます。これが付いていると〈符号あり〉って
見なされます。だから signed char には 127 から -128 まで入るってこと
だね」
『……それってこれまでと一緒じゃん』
「そゆこと。ただ、それは VC だから」
『どゆこと？』
「開発環境によっては、デフォルトが signed とは限らないからね。 VC は
何も付けないと自動的に signed が付いたのと同じになるってこと」
『前もそーゆーのあったね』
「プログラミングにはそういうのがつきものだから注意してね。では本命、
符号なし整数値です！」

void UnSigned()
{
    unsigned char ch = 255;
    TRACE( "%u\n", ch );
    // 255
}

『あ、 unsigned ってのがそうなんだ』
「そう、これは〈アンサインド〉って読んで、これが付くと〈符号なし〉に
なります。だからこれは警告が出ません」
『ほー。あれ、 TRACE() が %u になってる』
「 %d は〈符号あり整数〉として表示するのだからね。〈符号なし〉として
表示するのは %u の方」
『ちょっと複雑ねー』
「まーね。この辺は実際複雑だから」
『どゆこと？』
「 signed char に -1 入れるのと、 unsigned char に 255 入れるのって、
ビット的には同じでしょ」
『うん、どっちも 11111111 だよね』
「つまりこれは〈符号あり〉ってみなすか〈符号なし〉って見なすかの問題
ってことだね」
『みなしの問題、つまりどう捉えるか、どういうものなのかって考えるかっ
てことだよね』
「たとえば」

void Compare()
{
    char ch = -1;
    unsigned char uch = ch;

    if( ch < uch )
    {
        TRACE( "%d < %u\n", ch, uch );
    }
}
// -1 < 255

『あ、 char のを unsigned char に入れてるんだ。で、 if で比べて……
そっか、 unsigned char のに入れると -1 が 255 になっちゃうから、そっ
ちの方が大きくなっちゃうんだ』
「ビット的には同じだけど、〈型〉が違うから比較方法が変わっちゃうんだ
よね」
『型？』
「そう。 int とか char とか unsigned char みたいな〈変数を作るときに、
その変数がどんな性格か〉を決めるものを〈型〉っていいます」
『つまり、 char と unsigned char は、メモリの上じゃおんなじ１マスな
のに、 char はマイナスあり、 unsigned char はマイナスなしってゆー
ふーに、性格が変わるってことね』
「そういうこと。 < なんかの演算子は、掛かる変数がどんな型かで比較方
法が変わるわけ。今の例みたいにね」
『プログラミングはみなしの世界。型はその〈どうみなすか〉を決めるもの
だから、大事ってことよね』
「そういうことだね。この部分、とっても大事だから」
『そんなに大事？』
「大事だね。こういう部分に問題が起きやすいから」
『たとえば？』
「たとえば今の比較の問題。後から出てくるけど、普段は char の方がよく
使うのに、実際の処理は unsigned char の方がよく使うとかあるんだよね」
『どゆこと？』
「入ってる数字は 0 から 255 なのに、それ入れるのは char の変数ってこ
と。こういうとこ勘違いするとあいたーってことになりかねないからね」
『そういうのの対処法は？』
「どこが問題になりやすいのかってことを気にしておくことだね。符号問題
は、比較が一番の問題点だから、比較するときに気を付けるとかね」
『 < を使う時に〈あ、符号大丈夫かな〉って考えるんだ』
「あとは余裕だね。 255 まで入るから unsigned char ってよりは、 int 
使っちゃう方がいいとかね」
『なるほど、余裕持たせれば面倒なこと考えなくていいんだ』
「実際にはそう簡単には割り切れないし、どういう場面でどっちを使えばい
いって議論はずっとされてきてて、決着が付いてなかったりするんだよね」
『つまり〈これすればＯＫ！〉みたいなのってないってこと？』
「そういうこと。火美ちゃんは、今日教えた〈みなしの世界〉ってどう思
う？」
『ヘン！　ってゆーかアブナイ、かな。たとえばさ、１って、１等ならいい
けど、成績で１って良くないじゃん、そーゆーふーに、場合場合で意味変わ
るのってなんか怖いな』
「その怖い世界がプログラミングの世界。そういう点を自覚するのも、大事
かな」
『なんかヤバイ世界に足突っ込んだ？』
「１年経って何を今さら」

/*
    Preview Next Story!
*/
『ってことはさ、世の中のコンピューターって、全部こんな感じ？』
「こんな感じ」
『うわー、なんかそう考えると怖いね』
「って、火美ちゃんだってこんな感じじゃん」
『ひーそうだったー！』
「というわけで次回」
＜ Version 4.07 short とバイトオーダー ＞
『につづく！』
「火美ちゃんもみなしの世界に生きてるんだよ」
『……じゃー水希ちゃんを美形ってみなすこともできるんだ』
「おい」


/*                       金菜さんの憂鬱                           */
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!!                      */


