我試圖找到公式來計算包含M個n位無符號二進制數的總和所需的最大位寬。謝謝!存儲M個n位二進制數的總和的最大位寬
回答
假設爲正整數,您需要floor(log2(x))+1位來存儲x。並且m個n位數的總和可以產生的最大值將是m * 2^n。 所以我相信公式應該是
floor(log2(m * 2^n)) + 1
位。
最大的n位數是2^n-1,而不是2^n – mbschenkel
@mbschenkel只有1個數字是正確的,但當您有兩個數字的總和時,可以將數值轉移到下一個數字。所以你需要存儲一個額外的位來進行轉賬 – MBurnham
你已經在用'm'來處理這個問題了。如果'B = 2^n-1'是1的最大可能值,那麼'm * B'是'm'加數的最大可能和,而不是'm *(B + 1)'。 – mbschenkel
如果我添加2個數字,我需要比2個數字中較寬的一個多1位來存儲結果。所以,如果我添加2個n位數,我需要n + 1個位來存儲結果。
if I add another n-bit number, I need (n+1)+1 bits to store the result (that's 3 n-bit numbers added so far)
if I add another n-bit number, I need ((n+1)+1)+1 bits to store the result (that's 4 n-bit numbers added so far)
if I add another n-bit number, I need (((n+1)+1)+1)+1 bits to store the result (that's 5 n-bit numbers added so far)
所以,我覺得你的公式是
n + M - 1
這是一個上限,但不一定是最小需求(儘管OP要求最大...)。添加兩個數字時,不要使用全部範圍:例如1 + 1 = 10,而不是11,1 + 1 + 1 = 11,並且根本不使用第3位。儘管如此,這對兩個補碼負數是不同的。 – mbschenkel
- 1. N位數字的二進制數字
- 2. Prolog中最大爲N-M的總數
- 3. 拆分以二進制個位數2個位數二進制
- 4. 劃分n位二進制整數
- 5. 以最快的方式生成所有n位二進制數
- 6. 什麼是以下5位二進制數的總和的十進制數值?
- 7. java 4位小數位的二進制
- 8. 如何從二進制獲得N位
- 9. 試圖二進制部署到不同的二進制已存儲的位置
- 10. 如何在16位二進制,32位二進制和64位二進制中編寫整數值「60」
- 11. 在clojure中生成n位數的二進制數
- 12. 查找有他們的N個存儲N^2號的位數
- 13. 構造一個圓包含所有n位二進制數
- 14. 如何將64位整數存儲爲二進制值,並且我如何讀取存儲的64位整數?
- 15. 找到N個位長度的二進制補一些
- 16. 15位二進制64位小數?
- 17. 存儲128位散列:兩個bigint或二進制(16)?
- 18. 所有正好n位的二進制數
- 19. 正整數n的二進制表示中有多少位?
- 20. N位RGB位圖的位圖存儲/內存表示
- 21. 一個N×M陣列或M個大小爲N的數組?
- 22. 二進制數據處理和位與
- 23. String.equals()按位和二進制數
- 24. 使用二進制搜索找到N * M個乘法表k大數字
- 25. Git和二進制數據,最好的存儲方法
- 26. 二進制十進制負數位集
- 27. 查找存儲爲Ahnentafel數組的二進制最大堆的最小元素
- 28. 二維位數組的最大或值
- 29. C++將二進制轉換爲大於64位的位的十進制
- 30. 提取的最後四位數的INT的二進制表示
好,如果我添加了兩個它可能需要長達兩個位一個位數字。如果我添加兩個兩位數字,最糟糕的情況是需要三個位數來翻轉。如果我添加兩個三位數最壞的情況下需要四個... –
如果我添加1111與四位和1位,它需要五個結果。沒有不同於小數點後兩位數字的數字可能需要兩位數的結果,依此類推。 –