ALU底層方法及計算機整數加減乘除模擬

2022-01-21 00:13:26 字數 3081 閱讀 6767

alu是計算機cpu的核心,即 算術邏輯單元(arithmetic and logic unit)

alu有幾大功能,是計算機計算最基礎的功能:

1.算術運算:包含加法、減法等

2.邏輯運算:主要是布林運算,邏輯和、或、非、異或等

3.求補器:計算機中,二進位制補碼極其重要,可以求乙個二進位制的補碼(原始碼取反得反碼,反碼加一得補碼)

4.移位器:主要有 算術右移、邏輯右移、左移

5.狀態標誌:乙個記錄狀態的標誌。

4/**

5 以下加法減法等都預設是相同長度的,如果長度不同會報錯,當然,我只是懶得處理。

20*/

2122

public

class

alu

35return

s;36}37

38/**

39* 預設長度,即可以滿足的最小長度

40*/

41public string int2binary(int

n) else48}

4950

public

intbinary2int(string binary)

5354

/**55

* 加法器:計算兩個二進位制的和56*

57*

@param

binary1

58*

@param

binary2 必須相同長度

59*

@return

返回len+1長度: 最高位進製+和

60*/

61public

string add(string binary1, string binary2) else

if (res[i] == 3) else carry = 0;//

無進製,前面乙個進製置073}

74 string result = "";

75for (int i = 0; i < res.length; i++)

78return carry +result;79}

8081

public string substract(string a, string b)

8485

public string get01(int

n, string zeroorone)

90return

res;91}

9293

public

string shiftrightlogically(string binary)

9697

public

string shiftleft(string binary)

100101

/**102

* 算術右移

103*/

104public

string shiftright(string binary)

107108

/**109

* 取補碼(相反數)

110*/

111public

string getnegative(string binary)

114115

/**116

* 取反碼

117*/

118public

string getcomplement(string binary)

123return

res;

124}

125126

/**127

* 整數乘法,布思演算法

128*/

129public

string multiply(string q, string m) else

if (qq0.equals("01"))

140 string temp = shiftright(a + q +q0);

141 a = temp.substring(0, a.length());

142 q = temp.substring(a.length(), 2 *a.length());

143 q0 = temp.charat(temp.length() - 1);

144}

145return a +q;

146}

147148

public string divide(string a, string b)

164else

167168

//判斷a的符號變化沒有;

169if (a_sign == a.charat(0) || !a.contains("1"))

172else

176}

177 string res = new string[2]; //

返回0:商,1:餘數

178 res[0] = (a.charat(0) == b.charat(0)) ?q : getnegative(q);//商在q中,如果除數被除數不同號,則取補碼

179 res[1] =a;//餘數在a中

180return

res;

181}

182183

public

static

void

main(string args)

199 }

output:

000000000101

1110

111111111111

111110

001111

011111

000000011100

0111100

10100

1011

01001001

1001

0010

11011101

00111...00001

媽的,考完上機,剛才考得差不多都是上面這些內容,只有乙個讓人看不太懂的加法器,不過還好可以推理出來。

皇天不負有心人啊

計算機中整數的加減運算

通常在程式設計時,會預設將指標以及位址等說明為無符號整數,故其遵循無符號整數的加減運算。在其他情況下面,通常都是進行帶符號的整數運算,但是這兩種運算的本質其實是相通的,因為在計算機內部,這些有無符號整數的加減或者乘除操作其實都是通過相同的加法器來完成的 在加法器內部通過輸入進行判斷是輸出無符號還是有...

計算機底層04 計算機儲存層次架構

上接 計算機底層03 cpu工作原理 按照儲存介質分類 有磁芯,磁碟,光碟,半導體儲存 按照儲存性質分類 易失性儲存 非易失性儲存 也叫做非持久化儲存 持久化儲存 易失性儲存通常指斷電即丟失 按照效能層次分類 主存 外存進行分類 而快取為了彌補速度的差異性 儲存分為主存,輔存和快取 而主存裡有ram...

計算機底層網路協議

基本功能為透過目標裝置的ip位址,查詢目標裝置的mac位址,以保證通訊的順利進行。在每台安裝有tcp ip協議的電腦或路由器裡都有乙個arp快取表,表裡的ip位址與mac位址是一對應的。當傳送資料時,主機a會在自己的arp快取表中尋找是否有目標ip位址。如果找到就知道目標mac位址為 00 bb 0...