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 と評価されます(たとえば)。整数昇格規則により、明示的なキャストが必要です。xXsigned short
標準仕様では符号付きオーバーフローが定義されていないため、これは技術的には UB であることに注意してください。