0

プログラムに1つのWORD変数があります。

WORD hour;

しかし、私がそれを比較すると

if(hour>=0 && hour<=18)
{
    hour+=6;
}

警告が生成されます [警告]データ型の範囲が限られているため、比較は常にtrueです

IDEとしてDev-C++を使用しています。

4

3 に答える 3

5
if(hour>=0 && hour<=18)

警告は、 (通常)の typedef である型の ishour >=0に対して常に true で ある比較に対するものだと思います。これは、常に より大きいか等しいことを意味します。hourWORDunsigned shorthour0

 typedef unsigned short WORD;

MSVC++ では WORD がどのように定義されているかを確認してください。そうでunsignedない場合はコンパイラを確認してください。それがunsigned1の場合、hour >=0明らかtrueに のすべての可能な値ですhour。その場合、これだけを書く必要があります:

if(hour<=18) //(hour >= 0) is implied by its type
{
    hour+=6;
}

unsigned int1. であるか であるかは問題ではないことに注意してくださいunsigned short。である限りunsignedhour >=0のすべての可能な値に対して真になりますhour

于 2012-06-22T05:36:35.120 に答える
1

整数型としてどこかに -edされてWORDいるようで、常に正の数 ( ) になります。したがって、最初の比較は常に真です。typedefunsigned>=0

于 2012-06-22T05:36:10.193 に答える
0

WORD のデータ型に応じて (提供していないため、unsigned short であると想定します)、unsigned short には負の整数が収まらないため、最初の比較は常に true になります。したがって、コンパイラは、最初の比較は多かれ少なかれ無意味だと言いました。

于 2012-06-22T05:36:05.277 に答える