回答前先說兩句~
正常來講N位有符號數最大的數值是2的N-1次方再減1,但是有符號數一般用補碼進行運算(可以簡化運算同時避免+0和-0是兩個數的問題),如果是補碼的話數值最大則是2的N-1次方(即負數中的最小值,由於沒有了-0所以負數的數值會比正數大1)。
那麼接下來回答這個問題
如果採用補碼,N位有符號數和M位有符號數相乘結果的最大數值是2的N+M-2次方,這是兩個負數相乘的結果,符號為正,用補碼錶示數值為2的N+M-2次方的正數需要N+M-1位,再加上1位符號位,結果就是最多可以為N+M位的正數,大概就長這樣:010000……(1後面有N+M-2個0)。
如果用原碼來分析的話,由於-0的存在導致負數最小值會+1,結果就變成了最多為N+M-1位,大概長這樣01111……(0後面1的情況好像比較複雜,因為是[2∧(N-1)-1]×[2∧(M-1)-1])。
最後再說一下
其實不必考慮這麼不規範的情況,因為實際數位電路設計中乘法器一般都是按4,8,16,32,64bit……這樣疊加的,就……很規範,設計的時候1個4位乘法器的結果就用8位數來儲存就可以了,所以要不是為了回答這個問題我也糊里糊塗地不會去深究答案到底是N+M-1還是N+M,反正不管怎樣位數乘2肯定夠用了……所以想提醒一下學弟學妹注意實際設計過程中各種設定的規格化和規範化,當然初學的時候思考這些問題是有好處的,但是將來設計的時候千萬別來個“5位乘23位”這種神奇設定給自己帶來不必要的困擾哦(●"◡"●)ノ❤
回答前先說兩句~
正常來講N位有符號數最大的數值是2的N-1次方再減1,但是有符號數一般用補碼進行運算(可以簡化運算同時避免+0和-0是兩個數的問題),如果是補碼的話數值最大則是2的N-1次方(即負數中的最小值,由於沒有了-0所以負數的數值會比正數大1)。
那麼接下來回答這個問題
如果採用補碼,N位有符號數和M位有符號數相乘結果的最大數值是2的N+M-2次方,這是兩個負數相乘的結果,符號為正,用補碼錶示數值為2的N+M-2次方的正數需要N+M-1位,再加上1位符號位,結果就是最多可以為N+M位的正數,大概就長這樣:010000……(1後面有N+M-2個0)。
如果用原碼來分析的話,由於-0的存在導致負數最小值會+1,結果就變成了最多為N+M-1位,大概長這樣01111……(0後面1的情況好像比較複雜,因為是[2∧(N-1)-1]×[2∧(M-1)-1])。
最後再說一下
其實不必考慮這麼不規範的情況,因為實際數位電路設計中乘法器一般都是按4,8,16,32,64bit……這樣疊加的,就……很規範,設計的時候1個4位乘法器的結果就用8位數來儲存就可以了,所以要不是為了回答這個問題我也糊里糊塗地不會去深究答案到底是N+M-1還是N+M,反正不管怎樣位數乘2肯定夠用了……所以想提醒一下學弟學妹注意實際設計過程中各種設定的規格化和規範化,當然初學的時候思考這些問題是有好處的,但是將來設計的時候千萬別來個“5位乘23位”這種神奇設定給自己帶來不必要的困擾哦(●"◡"●)ノ❤