signed short int
を使用せずに の最大値を確認するにはどうすればよいlimits.h
ですか?
ループの使用は効率的ではないと思います。ループよりも速くすることは可能ですか?
次のようなことができます
int max_short = ((unsigned short)(-1))>>1;
printf("%d\n", max_short);
つまり、unsigned short が想定できる最大値であり、符号ビットを 1 ビットシフトしたものです。
sizeof
サイズをバイト単位で取得するために使用できます。そこからは簡単な計算です。
とにかく、なぜ避けるのlimits.h
ですか?
チェックと言うので、与えられた値が a signed short
(またはunsigned short
) の最大値であるかどうかを判断したいと思います。limits.h
オーバーフローが発生したかどうかをテストすることで、これを含めずに簡単に確認できます。がそのデータ型の最大値である((X)(x + 1) < x)
場合にのみ true と評価されます(たとえば)。整数昇格規則により、明示的なキャストが必要です。x
X
signed short
標準仕様では符号付きオーバーフローが定義されていないため、これは技術的には UB であることに注意してください。