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

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

如何在mc里打造一個(gè)計(jì)算器[0] -- 基礎(chǔ)知識(shí)&備注

2019-12-22 11:33 作者:nyasyamorina  | 我要投稿


上圖為74181在mc里的4高實(shí)例, 與正文無(wú)關(guān)

二進(jìn)制


我相信如果真的不懂二進(jìn)制就不會(huì)點(diǎn)進(jìn)來(lái)看吧...........不過還是稍微提一下吧

在計(jì)算器中, 無(wú)論是條件判斷結(jié)果還是數(shù)字都是用TrueFalse表示的, 簡(jiǎn)單來(lái)說就算大家熟知的10,?雖然有時(shí)候會(huì)用1表示False, 0表示True, 不過這時(shí)候稍微注意一下就好

BIN

在計(jì)算機(jī)里最常用的數(shù)字表示方法是BIN, 也就是常說的二進(jìn)制, 任意一個(gè)整數(shù)q可以表達(dá)為下面形式

那么則q可以寫為以下形式:

如:? ?十進(jìn)制的32526853可以表示為二進(jìn)制的1111100000101001000000101

除了BIN還有另外一種常用的整數(shù)表示方法

BCD

BCD是一種十進(jìn)制的編碼方法, 就是把十進(jìn)制的數(shù)字逐位轉(zhuǎn)化位二進(jìn)制, 如:?

BCD按4位分割后, 其實(shí)就是相應(yīng)的十進(jìn)制, BCD在數(shù)字顯示等地方具有巨大的優(yōu)勢(shì), 雖然也存在直接使用BCD進(jìn)行計(jì)算的計(jì)算器, 但是都非常復(fù)雜, 所以外面計(jì)算部分使用BIN, 而輸入和顯示部分使用BCD或其他辦法

位操作

常用的位操作為 非not, 或or, 與and異或xor, 一般考慮位操作都是一位對(duì)一位, 一位對(duì)多位多位對(duì)多位, 一位對(duì)一位說明如下 (來(lái)自wiki)

為了避免符號(hào)混淆, or以后就使用or表示, 而不使用+, 其他同理

mc里對(duì)上述邏輯門的實(shí)現(xiàn):??綠色是輸入,?紅色的邏輯門,?藍(lán)色是輸出

not
and
or

異或門有很多實(shí)現(xiàn)辦法, 大家可以去摸索一下, 這里給出我在4高計(jì)算器使用的異或門??*最下, 注1

xor

多位的位操作

在多位數(shù)據(jù)的處理中經(jīng)常會(huì)遇到 4位 xor 1位 等情況, 處理辦法就是多位的每一位都與另一個(gè)輸入進(jìn)行位操作

這里使用4位作示例:

1)? ?1010?and?1 = 1010;? 1010 and 0 = 0000

2)? ?1100 or 1 = 1111;? 1100 or 0 = 1100

3)?? 0101 xor 1 = 1010;? 0101 xor 0 = 0101

4)? ?not 0110 = 1001

而遇上多位與多位的操作, 處理辦法是相應(yīng)的每一位進(jìn)行操作, 示例:

1)? ?1100 or 0110 = 1110

2)? ?0101 and 0110 = 0100

3)? ?1100 xor 0101 = 1001

在多位操作中存在一個(gè)叫做 位移 的操作, 也就是整體數(shù)據(jù)向左或向右移動(dòng)

左移: 右邊空出來(lái)的地方用0補(bǔ)充;? ?右移: 右邊移動(dòng)到原數(shù)據(jù)外面的直接舍去

示例 (8位):

1)? ?00011011 << 2?= 01101100

2)? ?00011011 << 5 = 01100000? /? 1101100000? ?(這里出現(xiàn)兩個(gè)結(jié)果是因?yàn)橐粋€(gè)考慮了溢出整形, 另一個(gè)沒有, 在實(shí)際操作中按需求設(shè)計(jì)電路? ??溢出整形: 見下)

3)? ?00011011 >> 2 = 00000110

4)? ?00011011 >> 5 = 00000000

溢出整形

一般計(jì)算機(jī)是不能處理太大的數(shù)字, 按照現(xiàn)在來(lái)說, 常見的是64bits計(jì)算機(jī), 單次處理的數(shù)字不能大于 2^65-1? (64個(gè)1), 也就是36893488147419103231?(如果你在使用python, 那也請(qǐng)必須牢記這個(gè)事實(shí)), 雖然這個(gè)數(shù)字大得出乎想象, 但是在設(shè)計(jì)電路時(shí)這是必須考慮的事情

那么假如處理數(shù)字的過程用還是出現(xiàn)了超過64位的數(shù)據(jù), 計(jì)算機(jī)只會(huì)把高與64位的二進(jìn)制直接舍去, 而這個(gè)就叫做溢出整形

示例:? ?假設(shè)我們的計(jì)算機(jī)異常辣雞, 只有4bits, 也就是說最大的數(shù)字是15 (2^5-1)

在范圍內(nèi)的計(jì)算:? ?2+3=5:? ?0010 + 0011 = 0101,? 這是沒有問題的

但是遇上 9+8?的話:? 1001 + 1000?= 10001,? 這時(shí)候計(jì)算器只能舍去溢出的部分得到0001

注: 現(xiàn)代的計(jì)算器已經(jīng)有專門處理溢出的指令, 就是為了確保處理大數(shù)據(jù)不會(huì)出現(xiàn)上述的錯(cuò)誤

但是如果你正在學(xué)習(xí)編程, 可以注意到c或java等語(yǔ)音依然會(huì)出現(xiàn)溢出整形的情況, 前提是不報(bào)錯(cuò),? 但是python會(huì)自動(dòng)調(diào)用上述指令, 使得溢出部分放在下一次周期計(jì)算, 所以py雖然可以處理很多的數(shù)字, 但是相應(yīng)的處理時(shí)間也是劇增的

如果你正在設(shè)計(jì)N位計(jì)算器, 那么相應(yīng)的溢出整形可以表示為:? ?X and (2^(N+1)-1)

上面4bits的例子:? ?(1001 + 1000) and 1111 = 0001

我自己擅自約定的東西

為了可以清楚地表示輸入與輸出的關(guān)系, 而不被復(fù)雜的邏輯門電路圖沖昏頭腦, 我將會(huì)大量使用簡(jiǎn)單圖畫加類似python式的語(yǔ)言, 這里使用異或門做例子:

有時(shí)候甚至?xí)硎緸?

雖然這樣并不能很好地表示出電路圖, 但是可以很清楚地看到數(shù)據(jù)之間的關(guān)系, 進(jìn)而根據(jù)關(guān)系設(shè)計(jì)電路

對(duì)于? if (a=1): Out=b; else: Out=c,?這種關(guān)系, 可以重新表示為:? ?Out = (a and b) or ((not a) and c),?這樣就把if語(yǔ)句轉(zhuǎn)化為邏輯結(jié)構(gòu), 從而設(shè)計(jì)出相應(yīng)的電路, 是重點(diǎn), 要考的

半加器

注1:??

設(shè)計(jì)異或門時(shí)需要注意一個(gè)地方, 異或門是一種叫做半加器的部件的核心結(jié)構(gòu), 半加器可以輸入兩個(gè)一位二進(jìn)制, 輸出一個(gè)兩位二進(jìn)制, 對(duì)應(yīng)的操作是加法

把半加器所有情況列出來(lái):

0+0=00; 0+1=01; 1+0=01; 1+1=10

觀察可知, 高位的結(jié)果跟與門是一樣的, 而低位的結(jié)果就是異或門的結(jié)果,? 為了化簡(jiǎn)繁瑣的電路, 半加器可以表示為:

直接在異或門里面與門輸出的地方直接拉一根線就可以當(dāng)作半加器的高位輸出

所以在設(shè)計(jì)異或門時(shí)記得預(yù)留一個(gè)S的輸出

有了上面的知識(shí)可以設(shè)計(jì)出大部分電路

但是為了做出計(jì)算器還是不夠的, 不過一下子寫太長(zhǎng)也不太好

計(jì)算器需要使用的寄存器位移寄存器在下一篇講述

下一篇:? 簡(jiǎn)單計(jì)算器的整體結(jié)構(gòu)

如何在mc里打造一個(gè)計(jì)算器[0] -- 基礎(chǔ)知識(shí)&備注的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
尚志市| 玉山县| 房产| 赤壁市| 清原| 且末县| 漾濞| 西安市| 镇宁| 喀喇| 博客| 上饶县| 三原县| 大姚县| 红原县| 钦州市| 永安市| 浠水县| 丹凤县| 万州区| 株洲县| 桦川县| 松阳县| 信丰县| 荣成市| 高平市| 屏山县| 广饶县| 金溪县| 赣州市| 洛宁县| 高阳县| 安仁县| 财经| 寿宁县| 奉化市| 固安县| 祁东县| 微博| 太湖县| 吉木乃县|