-1

32ビットと64ビットの算術オーバーフローをチェックすることで違いがあるのだろうか?(制限を除く..)

たとえば、32ビット乗算の場合a * b

if(b > 0 && a > UINT32_MAX_VALUE / b) {
//Overflow
} 

64ビット乗算に同じロジックを使用できますか?お気に入り:

if(b > 0 && a > UINT64_MAX_VALUE / b) {
//Overflow
} 

符号付き/符号なしで64ビットオーバーフローをチェックする必要がある場合、トラップはありますか?

4

1 に答える 1

0

あなた自身のためにそれを単純化してください。32ビットintと64ビットの違いは何intですか?intはであることがわかってintいます。同じものを含めることができ、同じルールに従いますが、ビット数が多くなります。

char対aについて考えてみてくださいshort(32ビットシステムの場合)。

unsigned char cmax  = 0xFF;   // 1111 1111(2) = 255(10)

unsigned short imax = 0xFFFF; // 1111 1111 1111 1111(2) = 65535(10)

これらのいずれかに1を追加すると、一方が他方の2倍のサイズでオーバーフローします。ある場合と他の場合のオーバーフローをチェックするために特別なことをする必要がありますか?いいえ。

intもちろん2つあるため、例は異なりますが、理由は同じです。

于 2012-11-06T13:24:03.763 に答える