////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


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

    送信日： 2003/05/05(Mon) No.205
    配信数： 3180 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

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

・５月表紙壁紙。
　毎月恒例、新しい表紙です。今回はあんま出来良くないかも……。
　ダウンロードは CG Galleryにて。
[ CG Gallery ]
http://www.kab-studio.com/CG/Gallery/


・ほとはー１話追加！
　三人合体ホットハーブに１話追加。攻撃準備開始……。
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.com/nikki2/

2003/04/27 (Sun)
　午前中は洗濯とか。ほとはー解説。ハオシャオは普通の人です。武道・武
芸板が面白い……。そして軽いキーボード。反発が少ないって微妙？

2003/04/28 (Mon)
　VB で２次元配列を動的に。アクション−フォーム間の関係って JSP に貼
り付けたフォームそのものに関係してるのか。 AirH" 解約。ナーゴかわい
い……。ゴールデンウィークの予定。表紙壁紙に気合い入れたい。

2003/04/29 (Tue)
　なんかリズム違う。ほとはー描いたり。普通のキーボード使いづらい。攻
殻機動隊ＤＶＤいい感じだ。そしてハオシャオはＡＰ？　そして DOM と
オブジェクトの関係って？　DOM で HTML はパーシングできないのでわ。

2003/04/30 (Wed)
　今日ものんびり。ぷらとわ１話と表紙壁紙のラフ。マンガとイラストは全
然違う。新宿行って飲み。そして JavaScript とデータベース。 document 
の違いに注意。

2003/05/01 (Thu)
　表紙壁紙完成してない……。かなり体力奪われる。 Making を新しくする
かなぁ。カレイドスターが面白い。今クール一番？　そして .Net と 
InterDev 。 DreamWeaver の方がいいかも。

2003/05/02 (Fri)
　まだ表紙壁紙完成しない。ソウルキャリバー２のリンク強すぎ。ヒット数
が平日並だ……。そして合コン。そしてデータベースと言語。 WEB でって
場合のデメリットとかも言うべきなんじゃ。

2003/05/03 (Sat)
　５月表紙壁紙完成……だけど、出来は……。ちょっと限界が……。 
Apache を立てたけど届かない……。キーボードの反発力。そして ActiveX 
と VB 。グローバル変数はやめて……。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第七章　告白　−６−

「じゃ、次はこっちの番だな」
　雅樹が右腕を構える。
「動くなよ、一発目は外すからな」
「……」
　直撃は致命的。舞は雅樹を信じて、無防備に立つ。
「白炎煌々」
　右手に灯るのは、白い光。その右腕を振るう。
「旋、閃ッ」
　腕の軌跡の延長上に白い面が生まれ、舞の左肩をかすめる。背後の金網が
軌跡通りに断線した。
　焼け焦げる臭いの中、舞はその光があった場所を感じる。水蒸気の状態か
ら熱量を読み取り、口をぎゅっと結んだ。
　だが。
「じゃ、今度は当ててね」
　舞は両腕を振るい、大量の水が舞のまわりを舞う。
「躱せよ」
「やだ」
「なら撃たない」
「じゃあこっちからいくから！！」
　左腕を振るって水槍が飛ぶ。水量は先の比ではない。
「ったく、仕方ねぇな！　死ぬんじゃねぇぞ！」
　そう言う雅樹の口元は、少し緩んでいた。
「白炎、」
　走りつつ右腕を構え、
「旋閃ッ！」
　振るう。
「っ！！」
　両腕を振るったのを最後に舞の姿が消える。光の壁が生まれると同時に割
れる。空気が強く震え、大気が霧に変わり、光と共に白く閃く。
　手応えは、分からない。
「ちっ……甘え過ぎか」
　穂香にすべてを任せていたから、今の状態で感じ取れるものが何ひとつな
い。穂香がいれば、そう思ってしまう自分を厭う。
　それでも。
「大丈夫だからねー」
　舞ののんびりした声で雅樹は自分を取り戻す。爆音が止みつつある中、わ
ずかに指を弾く音が聞こえた。霧が一気に晴れ、地面に仰向けに倒れてる舞
の姿が現れる。
「っ、たく、全然大丈夫じゃねぇだろうが」
「体は動かないけど、手足は動くから」
　言いつつそれを確認して、でも舞は起きあがれない。
「同じように爆散させようとしたのか？」
「成功はしたけど、そのショックでこれじゃね。でも」
　舞は右腕を伸ばした。
「次は、完全に止めるから」
「なら自分で起きあがれ」
　雅樹はぷいとそっぽを向き、舞はぶーとなった。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『あたし、また下手に描かれた……』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 11.05
signed char と unsigned char

「今回は signed と unsigned について説明します」
『それ自体は前にやったよね。符号があるのとないのって』
「 Version 4.06 ( No.056 ) で説明したように、 signed が符号あり、 
unsigned が符号なしです」
『でもさ、それってあんま関係ないと思うんだけど。だって文字でしょ？』
「それがおおありなんです。まず、その singed とかを説明したページにあ
るコードをもう一度試してみます」

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

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

「何も付けてないと signed と同じだから、 ch の方は signed です。で、
それと unsigned を比較すると」
『そうそう、同じ -1 でも、 unsigned だと 255 になっちゃうんだよね』
「あ、でも勘違いしないで欲しいんだけど、ビット的には ch も uch も同
じ 0xFF だからね」
『え、そうなの？』

    unsigned char uch = ch;

「ってした時には、実際には何も起きてません。こっちじゃなくて」

    if( ch < uch )

「このとき、 ch は 0xFF を -1 、 uch は 0xFF を 255 ってみなして」
『それで比較しちゃうわけね』
「言い換えると、これは < の機能ってことかも」
『機能？？』
「そう。 < は signed か unsigned か調べて、それを元に整数値に変換し
て比較してるってこと」
『そういう機能が備わってる……？』
「この辺はちょっと難しいかもね。演算子ってただ計算をするだけじゃなく
て、いろんな機能もあるんです。そういうののひとつってところかな」
『うーん……』
「まぁそれは今は置いておいて、重要なのは signed か unsigned かで比較
したときの結果が変わっちゃうってこと」
『それって重要なの？』
「すごく重要。だって前回、 Shift JIS のリードバイトの範囲とトレイル
バイトの範囲って言ったでしょ」
『あーっ！！！　そっか、その範囲に入ってるかどうかって、もちろん比較
しなきゃいけないわけだから……』
「では実際に試してみます。リードバイトかどうか判別する関数の signed 
を使うほうから」

bool IsReadByte_bad( signed char p_ch )
{
    if(
        ( ( 0x81 <= p_ch ) && ( p_ch <= 0x9F ) ) ||
        ( ( 0xE0 <= p_ch ) && ( p_ch <= 0xFC ) )
        )
    {
        // リードバイトです。
        return true;
    }

    return false;
}

「これを次のような関数から呼びます」

void Use_IsReadByte_bad()
{
    const signed char pchStr[] = "あ";
    bool bResult = IsReadByte_bad( pchStr[0] );
    if( bResult == true )
    {
        TRACE( "リードバイトです。" );
    }
    else
    {
        TRACE( "トレイルバイトです。" );
    }
    // トレイルバイトです。
}

「 "あ" のリードバイトを渡してるんだから、絶対にリードバイトになるは
ずなんだけど」
『げ、実行したらトレイルバイトって言われた』
「 "あ" の文字コードは 0x82 0xA0 」
『範囲には入ってるよねぇ』
「でも」

    0x81 <= p_pch

「この p_pch には 0x82 が入ってるわけだから、普通に比較すると」

    0x81 <= 0x82

『だからあってるはずよね』
「ところが、 p_pch は signed だから符号あり。そうなると、互いに符号
ありの比較になります。その場合」

    -127 <= -126

「となるため、当てはまらなくなってしまうんです」
『……質問！』
「はい火美ちゃん」
『 0x81 が -127 とかってどうやればわかる？』
「それはこうしてください」

    TRACE( "%d\n", 0xFFFFFF81 );
    // -127

『う、なんか F が多い』
「こうすると -127 が出てきます」
『なんで F 入れなきゃいけないの？』
「う”……それはかなーり難しいから今度」
『う”ー……あ、もひとつ質問』
「はい火美ちゃん」
『 signed で比較すると逆になっちゃったけど、それって１６進数だと大き
いのに１０進数だと小さいってことだよね。なんか変くない？』
「さっきのページで教えたでしょ。 -1 は 11111111 、つまり 0xFF 」
『あ、そっか、逆になるんだ』
「だから、実際にはこんな感じ」

１６進数 : 0x00 - 0x7F - 0x80 - 0xFF
signed   :    0    127   -128     -1
unsigned :    0    127    128    255

「 signed だと、 0x7F と 0xF8 で逆になるって考えてください」
『むー、ややこしい……』
「まぁそういうわけで、この 0x7F 以上の数を使う文字の場合、 signed で
計算するとうまくいきません。なので、 unsigned を使います」

bool IsReadByte( unsigned char p_ch )
{
    if(
        ( ( 0x81u <= p_ch ) && ( p_ch <= 0x9Fu ) ) ||
        ( ( 0xE0u <= p_ch ) && ( p_ch <= 0xFCu ) )
        )
    {
        // リードバイトです。
        return true;
    }

    return false;
}

// 使います。
void Use_IsReadByte()
{
    const unsigned char pchStr[] = "あ";
    bool bResult = IsReadByte( pchStr[0] );
    if( bResult == true )
    {
        TRACE( "リードバイトです。" );
    }
    else
    {
        TRACE( "トレイルバイトです。" );
    }
    // リードバイトです。
}

『うん、こっちならちゃんとリードバイトって出た』
「あと、今回は省略するけど、どっちの文字の方が大きいか、っていうのを
比較するときにも関係するから」
『文字の大きさ？』
「たとえば」

ABC
BBC

「ってあった場合、辞書に並べるときはこの順番でしょ」
『そういう大きい小さい？』
「そう。こういう時 A < B みたいな比較をするわけだけど」
『これも unsigned じゃないとうまくいかないわけね』
「さて、ここまでを踏まえて、これからすごくややこしい話をします」
『う”っ、な、なに？』
「今見たように、 char は unsigned char とした方が安全です」
「 unsigned にすると出るデメリットはないの？」
『ありません』
「ならそうした方がいいわけ……よね」
『なんだけど、そうしません』
「そこがややこしいとこなんだ。なんで？」
「うーん、一番の理由は慣例的にそう、だからかな。 unsigned を付けない 
char しか使わない、っていうのが普通だし、問題になるのは文字の比較と
か四則演算するときくらいだから、その時キャストすればいいし」
『……二番目の理由は？』
「実は、 char が signed とは決まってないんです」
『へ？』
「 char が実際には signed か unsigned かは開発環境によって違うんで
す。 Visual C++ は char は signed 。 unsigned なのもあるし、最新の
VC .Net は好きな方を選べるしね」
『ならやっぱり、常に unsigned にするべきなんじゃない？』
「確かにそうなんだけどね……これがきっと最大の理由なんだけど、 
unsigned char から char へはキャストが必要なんだけど、ランタイムとか 
API とかは」
『げ。そっか、普通の char だから、渡すたびにキャストしなきゃいけない
んだ……』
「それはあまりにも大変だし、そうなると結局」
『何も付けない char 使うしかないってわけね……』

/*
    Preview Next Story!
*/
『なんだか、政治的策略を感じるわ……』
「そういう部分もあるかも」
『否定しないのー！？』
「こういうことは派閥争いと無縁じゃないから」
『そんでもって掲示板で罵り合うことになるんだ……ぶるぶる』
「というわけで次回」
＜ Version 11.06 Unicode ＞
『につづく！』
「今度もまたそういうのだ……」
『また！？』


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

・ほとはー追加予定
　三人合体ホットハーブに１話追加予定。５月中に４章は終わらせたいです
ねー。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

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

