演算法導論Ch2 1 4習題

2021-06-10 03:07:36 字數 1412 閱讀 4694

題目:  

有兩個各存放在陣列a和b中的n位二進位制整數,考慮它們的相加問題。兩個整數的和以二進位制形式存放在具有(n+1)個元素的陣列c中。請給出這個問題的形式化描述,並寫出偽**。

分析:二進位制整數的編碼,此處考慮原碼和補碼,原碼可以通過轉化成補碼來運算,這也體現了補碼在運算上的優勢。

實質為模擬計算機二進位制補碼的加法

計算機中採用補碼進行加法運算,並約定儲存單元和運算暫存器中的數都採用補碼表示,資料運算結果也用補碼表示。

定點小數補碼加法的運算公式為

[x]補+[y]補=[x+y]補     (mod 2)

推廣到定點整數後得出定點整數補碼加法的運算公式為:

[x]補+[y]補=[x+y]補     (mod 2n+1)

簡單證明該公式:

根據補碼的定義有:[x]補 =2n

-x      (n為字長-1)

那麼,[x]

+[y]補 =2n

-x +2n

-y = 2n+1

–(x+y)  = [x+y]

(mod 2n+1

)

簡單用語言描述,即將補碼的符號位帶入運算,按位對應相加,有進製則進。並捨棄符號位的進製(如果有進製的話)。

**很簡單

void sum(int* a, int* b, int len, int* c)

else

}c[0] = (a[0] + b[0] + carry) % 2;

}

引申:1、補碼的實質。

以時鐘為例,3點可表示為 時鐘從12點方向順時針轉90°,也可表示為時鐘從12點方向逆時針轉270°。

即3 = 0 + 3, 且 3 = 12 - 9, 那麼這樣一來0-12的任意數字都有兩種表示方式,x 和 12-(12-x);

對應到二進位制的補碼,它和時鐘的相同點在於,值溢位後會產生迴圈。如12點後會變回1點周而復始,最大的正數溢位後會變成負數。

2、為什麼使用補碼

可以將符號帶入運算,從而將減法轉換成加法。

計算機內部只有加法器,而無減法器,加法器可以由簡單的與非門組合而成,減法器的製作線路複雜,因而使用加法代替減法是必要的。

演算法導論 習題2 1 4

有兩個各存放在陣列a和b中的n位二進位制整數,考慮它們的相加問題。兩個整數的和以二進位制形式存放在具有 n 1 個元素的陣列c中。請給出這個問題的形式化描述,並寫出偽 以下是我寫的c 如有錯誤請指出 include stdafx.h include include define n 20 using...

演算法導論習題2 1 4

coding utf 8 exercises 2.1 4 consider the problem of adding two n bit binary integers,stored in two n element arrays a and b.the sum of the two intege...

演算法導論2 1 4

有兩個各存放在陣列a和b中的n位二進位制整數,考慮他們的相加問題。翻譯的夠爛 兩個整數的和存放在有n 1個元素的陣列c中,請給出這個問題的形式化描述,並給出偽 考慮兩個1位二進位制數a和b,假設它們的和c是個2位二進位制數,c 1 a 在考慮兩個2位二進位制數 當第一位相加時,先計算進製位c2 a1...