-5

x=1000 ビット、y=500 ビットの場合、x+y と xy の最長の長さは?

参考までに: x+y と 750k の場合、答えは 1500 であってはなりません。そのため、私は混乱しています :(

4

4 に答える 4

0

+答えは、オーバーフローを処理する方法 (および関数とを定義する方法) によって異なります*

var:bitwidth変数にビット幅ビットがあることを意味する表記法を採用しましょう。これは、次の宣言があることを意味します。

x:1000
y:500

さらに、これらはバイエンディアン順 (右端のビットが最小のビット、左端が最大のビット) で格納されるという規則を採用しています。x+yオーバーフロー ビットを処理するには 1001 が必要であるとすぐに結論付けます。つまり、

z0:1000, z1:1001
z0 = x + y //overflow possible, ex: x=2^1000-1, y=1
z1 = x + y //overflow not possible

かけ算はもっと難しいa:8ですb:8

a:8, b:8
a = 11111111b //= 255
b = 11111111b //= 255
a * b == 1111111000000001 //=65025
//16 bits

乗算に必要なビット数はビットの合計であると予想するのは合理的です。

x:1000, y:5000
z:1500
z2:1499
z = x * y //would not have overflow
z2 = x * y //could have overflow

とはいえ、通常のマイクロプロセッサは大きい方の ( ) の幅を使用するだけで、:1000オーバーフローをドロップするか、オーバーフロー ビットを設定します。だから答えは:1000or:1000プラス:1

于 2013-10-18T23:36:51.507 に答える