0

signed short intを使用せずに の最大値を確認するにはどうすればよいlimits.hですか?

ループの使用は効率的ではないと思います。ループよりも速くすることは可能ですか?

4

3 に答える 3

1

次のようなことができます

int max_short = ((unsigned short)(-1))>>1;
printf("%d\n", max_short);

つまり、unsigned short が想定できる最大値であり、符号ビットを 1 ビットシフトしたものです。

于 2012-10-23T17:01:41.550 に答える
1

sizeofサイズをバイト単位で取得するために使用できます。そこからは簡単な計算です。

とにかく、なぜ避けるのlimits.hですか?

于 2012-10-23T16:57:58.970 に答える
1

チェックと言うので、与えられた値が a signed short(またはunsigned short) の最大値であるかどうかを判断したいと思います。limits.hオーバーフローが発生したかどうかをテストすることで、これを含めずに簡単に確認できます。がそのデータ型の最大値である((X)(x + 1) < x)場合にのみ true と評価されます(たとえば)。整数昇格規則により、明示的なキャストが必要です。xXsigned short

標準仕様では符号付きオーバーフローが定義されていないため、これは技術的には UB であることに注意してください。

于 2012-10-23T17:06:35.293 に答える