最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何在mc里打造一個計算器[2] -- 加減法器

2020-01-07 12:14 作者:nyasyamorina  | 我要投稿


在第0篇的結尾我說到了一個叫半加器的東西, 它可以處理兩個1bit輸入的加法, 并且輸出一個本位和進位? ? such:? 輸入 1, 1? ?輸出 1, 0,? ? 其中輸出為1的叫做進位, 輸出為0的叫做本位


半加器在mc里有很多種實現(xiàn)方法, 不過主要還是分為兩種,? 兩個輸入端在水平方向一致,?和在垂直方向一致,? 這里有兩個例子? (第二個是借鑒別人的)

水平方向輸入
垂直方向輸入 1
垂直方向輸入 2

一般來說我還是推薦使用垂直方向的, 因為mc的紅石特性使得橫向占地很大, 而使用水平方向的只會讓你的計算器占地更大從而造成大量卡頓? ?(心累.jpg)

有了半加器之后, 可以開始著手制作簡單的加法器了

半加器其中有一個進位, 這說明進位需要留著下一個bit處理??*下一個一般指的是左邊的, 但是半加器只有兩個輸入,? 兩個本位輸入加上上一位進位一共3個輸入,? 所以我們需要一個新的部件處理3個輸入的加法

現(xiàn)在我們假設3個輸入都是1,? 那么加起來就是3, 也就是二進制的11,? 可以看出在極限情況下輸出也只有2個, 一個進位一個本位,?

那么這種處理三個輸入的加法部件就可以做為這樣:

AB是兩個本位輸入, S_bar是上一位的進位,? S是進位輸出, C是本位輸出

這個部件就叫做全加器, 把全加器串起來就是一個通用的加法器了:

加法器

那么現(xiàn)在我們就實現(xiàn)了最簡單的 A+B 加法操作了

那么減法如何實現(xiàn)呢

A-B可以看作A+(-B), 而-B可以看作0-B,? 那么問題來了, 如何進行0-B這個操作?

先來舉例子:? ?-1 + 1 = 0,? ?而在4bits里, 1表示為0001,? 那么我們需要尋找一個數(shù)字B`, 使得B` + 0001 = 0000,? 這明顯在二進制是不存在的,? 但是如果我們考慮溢出整形的話?

那么上述等式可以變成? ? B` + 0001 = 10000 → 0000,? ?那么就可以知道 B` = 1111

也就是說考慮溢出整形的話,? 1111與-1的作用是一樣的

那么在允許溢出整形的情況下如何求得其他數(shù)字的相反數(shù)呢?

我們的重點是溢出整形, 并且溢出后需要整形為0000, 那么在溢出前最大的數(shù)字就是1111

然后我們的思路可以變?yōu)檫@樣,? 一個數(shù)字C, 它與B相加后為1111, 那么C+1就可以在形式上表示為-B? ?*** C+B=1111,? (C+1)+B=1000→0000

簡單可知C與B互為補數(shù),? 幸好在二進制里取補數(shù)最方便的方法就是取反, 即 C = not B

那么就可以得到負數(shù)的求得過程:? -B = (not B) +1

并且為了區(qū)分1111和1111, 一般有一個符號位在最左邊,? 也就是說在5bit整數(shù)里, -1 = 11111, 15=01111,??

但是一般不存在5bits這種奇葩的位數(shù),? 所以用8bits來做示例的話:

0 = 00000000;? ? -0 = 10000000

1 = 00000001;? ? -1 = 111111111

127 = 01111111;? ? -127?= 10000001

這就是一般說的8位符號整數(shù) 8int 的表示方法了, 最大數(shù)字: 127, 最小數(shù)字:-127

說了那么多廢話, 那么加減法器在mc怎么實現(xiàn)呢

我們已經(jīng)知道是否啟用減法要看符號位, 而我們習慣用S表示符號位, M表示數(shù)字本體

那么加減法器就可以表示為這種結構

而一塊關于減法的東西應該滿足下面的條件

經(jīng)過一番頭腦風暴后,? ?可以化簡得到? ?? Out =?此內(nèi)容已被隱藏, 需要回復以查看內(nèi)容

這個算式做成部件后就是這部分了

黑色的線就是S, 藍色部分是M的處理

注意: 為了使得? 6 + (-4)? 這種計算成立,? 符號位S也應該參與到加法計算中,? ?例子:(8bits)

00000110 + 11111100 = 1 00000010 →?00000010

可以看出符號位非常自然地被進位頂走了, 經(jīng)過整形后得到的結果正是2

這種計算方法會讓超過位數(shù)限制的計算得出奇怪的結果, 例子:??120 + 56

01111000 + 00111000 = 10110000? ?得到的結果是176, 明顯超出了8int的范圍, 但是計算機是不知道這種事情的, 并且會把10110000繼續(xù)按照8int處理得到 -80

這種情況是真實存在的, 所以這里為了還原這種bug也不做專門的溢出處理了

有興趣的可以自己去嘗試做一下一部分的溢出處理

加減法器就到此結束了, 只要努力自己思考一下就可以慢慢拼湊出來的東西, 所以也不存在存檔這種東西了

其實封面就是一個"觸發(fā)型"的32bits加減法器= =


*****? ?Out = (M xor S) + S

如何在mc里打造一個計算器[2] -- 加減法器的評論 (共 條)

分享到微博請遵守國家法律
萨迦县| 凉城县| 宜黄县| 吴堡县| 凤冈县| 揭西县| 八宿县| 加查县| 含山县| 鲁山县| 新和县| 武陟县| 奉贤区| 长葛市| 罗定市| 淳化县| 高密市| 永仁县| 合作市| 湖南省| 东兰县| 古蔺县| 加查县| 新蔡县| 堆龙德庆县| 云龙县| 昌图县| 股票| 吉安市| 寿宁县| 柯坪县| 泾阳县| 昭觉县| 肥乡县| 讷河市| 米泉市| 临桂县| 正宁县| 龙泉市| 张家界市| 灵川县|