FC2ブログ

R_SPHERE

ゲームプログラマー(LV5初プロジェクト終了)の管理人の日常です。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

unsigned型

まずは、こちらのソースを見てください。

#include <stdio.h>

void main( void )
{
  unsigned int ui_HP = 10;
  unsigned int ui_Attack = 20;

  if( ui_HP - ui_Attack <= 0 )
  {
    printf( "倒されました。\n" );
  }
  else
  {
    printf( "生きています。\n" );
  }

  unsigned short us_HP = 10;
  unsigned short us_Attack = 20;

  if( us_HP - us_Attack <= 0 )
  {
    printf ("倒されました。\n" );
  }
  else
  {
    printf( "生きています。\n" );
  }

  return;
}

ゲームで体力を計算する際にあり得る事ですが、
このソースを実行すると、どのような出力結果になるでしょうか?


正解はこれです。

生きています。
倒されました。

同じ式の判定ですが、
型によって、結果が変わってしまいます。
本来であれば、unsigned型の計算ですので、
負の値も正の値として扱われ、
共に、「生きています。」と出力されるはずです。

この理由は、プログラムの整数計算は4Byteのint型で最適化されているため、
2Byteのshort型といえども計算時にはint型として計算されます。
int型であれば負値であっても問題なく処理できるため、
上記のような結果になるのです。

もちろん、short型の判定部分を、

us_HP = us_HP - us_Attack;
if( us_HP <= 0 )

とすると、us_HPに計算結果を代入した時点で、
unsigned short型に戻りますので、
結果は「生きています。」が出てきます。

ということで、unsigned型は正の値域が拡がって便利ですが、
計算を行う場合には注意が必要です。
スポンサーサイト
  1. 2009/06/06(土) 11:49:43|
  2. プログラム
  3. | トラックバック:0
  4. | コメント:0
<<あずまんが大王 1年生 | ホーム | 小さな事件>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsphere.blog55.fc2.com/tb.php/92-9bbf33c1
この記事にトラックバックする(FC2ブログユーザー)

CLOCK

ACCESS

プロフィール

RYO

Author:RYO
東京近郊在住の
ゲームプログラマー
(LV5 初プロジェクト終了)

Twitter

    follow me on Twitter

    最新記事

    最新コメント

    月別アーカイブ

    カテゴリ

    日常 (25)
    仕事・学校 (34)
    ゲーム・アニメ・マンガ (42)
    レビュー (8)
    プリキュア (23)
    プログラム (5)
    お知らせ (1)
    未分類 (0)

    検索フォーム

    リンク

    このブログをリンクに追加する

    ブロとも申請フォーム

    この人とブロともになる

    QRコード

    QRコード

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。