先考慮兩個二進位制數之間的加法(對於補碼資料來說,加減法運算規則相同,因此只討論加法運算情況)運算。設資料位較大的位數為n,則加法運算結果需要用n+1位才能保證運算結果不溢位,也就是說兩個長度為n(另乙個資料位長度也可以小於n)的二進位制數進行加法運算,運算結果的有效資料位產長度為n+1。如果運算結果只能採用n位資料表示時,該如何對結果進行擷取呢?擷取後的結果如何能保證運算的正確性呢?
對於兩個長度為n的二進位制資料進行加法運算,需要採用n+1位資料才能獲得完全準確的結果。如果需要採用n位資料存放結果,則取低位n位會產生溢位,得出錯誤結果,取高n位不會出現溢位,但運算結果相當於降低了1/2。
前面的分析實際上是將資料均當做整數,也就是說小數點位置均於最低位的右邊。在數字訊號處理中,定點數通常把數限制在-1~1之間。考慮小數運算時,運算結果的小數點位置又該如何確定呢?對比表中的資料(有乙個**作為分析資料的例子,這裡省略了**),如果採用n+1位資料表示運算結果,則小數點位置位於次高位的右邊,而不再是最高位的右邊;如果用n為資料表示運算結果,則小數點位置位於最高位的右邊。也就是說,運算前後小數點右邊的資料位數(也是小數字數)是恆定不變的。實際上,在verilog hdl語言環境中,如果對兩個長度為n的資料進行加法運算,為了得到n+1位的準確結果,必須先對參加運算的數進行以為符號位擴充套件。
乘加運算中的有效資料位
討論運算結果的有效資料位時,都是指參加運算的訊號均是變數的情況。在數字訊號處理中,通常會遇到乘加運算的情況,乙個典型的例子就是有限脈衝響應 finite impulse response,fir 濾波器的設計。當乘法係數是常量時,最終運算結果的有效資料資料位根據常量的大小來重新計算。比如需要設計乙個...
利用位運算的特點做加法
題目 寫乙個函式,求兩個數之和,要求在函式體內不得使用 四則運算符號。思路 我們可以先分析一下如何做十進位制加法的,比如如何得出5 17 22這個結果。分三步 只做各位相加不進製,結果為12。考慮進製,進製值為10。把第一步和第二步的結果相加,相當於是乙個規模更小的加法,重複第一二步。模擬到二進位制...
LeetCode 不用加號的加法(位運算)
解題思路 位運算,只能用位運算子。a b同號比較好處理。主要是異號的情況,考慮 a 0,b 0,因為 a,b的絕對值都不會超過2 32,因此取模數為2 32。根據同餘方程可知 a b mod a mod b mod,mod b即為負數b在mod下的補碼 b int 1 32,2 如果 a mod b...