乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      關(guān)于二進(jìn)制世界的秘密

       陽(yáng)光少年p0ngae 2019-09-18

      我們都知道,計(jì)算機(jī)的底層都是使用二進(jìn)制數(shù)據(jù)進(jìn)行數(shù)據(jù)流傳輸?shù)?,那么為什么?huì)使用二進(jìn)制表示計(jì)算機(jī)呢?或者說,什么是二進(jìn)制數(shù)呢?在拓展一步,如何使用二進(jìn)制進(jìn)行加減乘除?二進(jìn)制數(shù)如何表示負(fù)數(shù)呢?本文將一一為你揭曉。

      為什么用二進(jìn)制表示

      我們大家知道,計(jì)算機(jī)內(nèi)部是由IC電子元件組成的,其中 CPU內(nèi)存也是 IC 電子元件的一種,CPU和內(nèi)存圖如下

      關(guān)于二進(jìn)制世界的秘密

      CPU

      關(guān)于二進(jìn)制世界的秘密

      內(nèi)存

      CPU 和 內(nèi)存使用IC電子元件作為基本單元,IC電子元件有不同種形狀,但是其內(nèi)部的組成單元稱為一個(gè)個(gè)的引腳。有人說CPU 和 內(nèi)存內(nèi)部都是超大規(guī)模集成電路,其實(shí)IC 就是集成電路(Integrated Circuit)。

      關(guān)于二進(jìn)制世界的秘密

      IC元件切面圖

      IC元件兩側(cè)排列的四方形塊就是引腳,IC的所有引腳,只有兩種電壓: 0V5V,IC的這種特性,也就決定了計(jì)算機(jī)的信息處理只能用 0 和 1 表示,也就是二進(jìn)制來(lái)處理。一個(gè)引腳可以表示一個(gè) 0 或 1 ,所以二進(jìn)制的表示方式就變成 0、1、10、11、100、101等,雖然二進(jìn)制數(shù)并不是專門為 引腳 來(lái)設(shè)計(jì)的,但是和 IC引腳的特性非常吻合。

      計(jì)算機(jī)的最小集成單位為 ,也就是比特(bit),二進(jìn)制數(shù)的位數(shù)一般為 8位、16位、32位、64位,也就是 8 的倍數(shù),為什么要跟 8 扯上關(guān)系呢?因?yàn)樵谟?jì)算機(jī)中,把 8 位二進(jìn)制數(shù)稱為一個(gè)字節(jié), 一個(gè)字節(jié)有 8 位,也就是由 8個(gè)bit構(gòu)成。

      為什么1個(gè)字節(jié)等于8位呢?因?yàn)?8 位能夠涵蓋所有的字符編碼,這個(gè)記住就可以了。

      字節(jié)是最基本的計(jì)量單位,位是最小單位。

      用字節(jié)處理數(shù)據(jù)時(shí),如果數(shù)字小于存儲(chǔ)數(shù)據(jù)的字節(jié)數(shù) ( = 二進(jìn)制的位數(shù)),那么高位就用 0 填補(bǔ),高位和數(shù)學(xué)的數(shù)字表示是一樣的,左側(cè)表示高位,右側(cè)表示低位。比如 這個(gè)六位數(shù)用二進(jìn)制數(shù)來(lái)表示就是100111,只有6位,高位需要用 0 填充,填充完后是00100111,占一個(gè)字節(jié),如果用 16 位表示 就是0000 0000 0010 0111占用兩個(gè)字節(jié)。

      我們一般口述的 32 位和 64位的計(jì)算機(jī)一般就指的是處理位數(shù),32 位一次可以表示 4個(gè)字節(jié),64位一次可以表示8個(gè)字節(jié)的二進(jìn)制數(shù)。

      我們一般在軟件開發(fā)中用十進(jìn)制數(shù)表示的邏輯運(yùn)算等,也會(huì)被計(jì)算機(jī)轉(zhuǎn)換為二進(jìn)制數(shù)處理。對(duì)于二進(jìn)制數(shù),計(jì)算機(jī)不會(huì)區(qū)分他是 圖片、音頻文件還是數(shù)字,這些都是一些數(shù)據(jù)的結(jié)合體。

      什么是二進(jìn)制數(shù)

      那么什么是二進(jìn)制數(shù)呢?為了說明這個(gè)問題,我們先把 00100111這個(gè)數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)看一下,二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),直接將各位置上的值 * 位權(quán)即可,那么我們將上面的數(shù)值進(jìn)行轉(zhuǎn)換

      關(guān)于二進(jìn)制世界的秘密

      二進(jìn)制轉(zhuǎn)十進(jìn)制表示圖

      也就是說,二進(jìn)制數(shù)代表的 00100111轉(zhuǎn)換成十進(jìn)制就是 39,這個(gè) 39 并不是 3 和 9 兩個(gè)數(shù)字連著寫,而是 3 * 10 + 9 * 1,這里面的10 , 1就是位權(quán),以此類推,上述例子中的位權(quán)從高位到低位依次就是7 6 5 4 3 2 1 0。這個(gè)位權(quán)也叫做次冪,那么最高位就是2的7次冪,2的6次冪 等等。二進(jìn)制數(shù)的運(yùn)算每次都會(huì)以2為底,這個(gè)2 指得就是基數(shù),那么十進(jìn)制數(shù)的基數(shù)也就是 10 。在任何情況下位權(quán)的值都是數(shù)的位數(shù) - 1,那么第一位的位權(quán)就是 1 - 1 = 0, 第二位的位權(quán)就睡 2 - 1 = 1,以此類推。

      那么我們所說的二進(jìn)制數(shù)其實(shí)就是 用0和1兩個(gè)數(shù)字來(lái)表示的數(shù),它的基數(shù)為2,它的數(shù)值就是每個(gè)數(shù)的位數(shù) * 位權(quán)再求和得到的結(jié)果,我們一般來(lái)說數(shù)值指的就是十進(jìn)制數(shù),那么它的數(shù)值就是 3 * 10 + 9 * 1 = 39。

      移位運(yùn)算和乘除的關(guān)系

      在了解過二進(jìn)制之后,下面我們來(lái)看一下二進(jìn)制的運(yùn)算,和十進(jìn)制數(shù)一樣,加減乘除也適用于二進(jìn)制數(shù),只要注意逢 2 進(jìn)位即可。二進(jìn)制數(shù)的運(yùn)算,也是計(jì)算機(jī)程序所特有的運(yùn)算,因此了解二進(jìn)制的運(yùn)算是必須要掌握的。

      首先我們來(lái)介紹移位運(yùn)算,移位運(yùn)算是指將二進(jìn)制的數(shù)值的各個(gè)位置上的元素坐左移和右移操作,見下圖

      關(guān)于二進(jìn)制世界的秘密

      移位過程

      上述例子中還是以 39 為例,我們先把十進(jìn)制的39 轉(zhuǎn)換為二進(jìn)制的 0010 0111,然后向左移位 <<一個(gè)字節(jié),也就變成了0100 1110,那么再把此二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)就是上面的78, 十進(jìn)制的78 竟然是 十進(jìn)制39 的2倍關(guān)系。我們?cè)谧?code>0010 0111左移兩位,也就是1001 1100,得出來(lái)的值是 156,相當(dāng)于擴(kuò)大了四倍!

      因此你可以得出來(lái)此結(jié)論,左移相當(dāng)于是數(shù)值擴(kuò)大的操作,那么右移 >>呢?按理說右移應(yīng)該是縮小 1/2,1/4 倍,但是39 縮小二倍和四倍不就變成小數(shù)了嗎?這個(gè)怎么表示呢?請(qǐng)看下一節(jié)

      便于計(jì)算機(jī)處理的補(bǔ)數(shù)

      剛才我們沒有介紹右移的情況,是因?yàn)橛乙浦罂粘鰜?lái)的高位數(shù)值,有 0 和 1 兩種形式。要想?yún)^(qū)分什么時(shí)候補(bǔ)0什么時(shí)候補(bǔ)1,首先就需要掌握二進(jìn)制數(shù)表示負(fù)數(shù)的方法。

      二進(jìn)制數(shù)中表示負(fù)數(shù)值時(shí),一般會(huì)把最高位作為符號(hào)來(lái)使用,因此我們把這個(gè)最高位當(dāng)作符號(hào)位。符號(hào)位是 0 時(shí)表示正數(shù),是 1 時(shí)表示負(fù)數(shù)。那么 -1 用二進(jìn)制數(shù)該如何表示呢?可能很多人會(huì)這么認(rèn)為:因?yàn)?1 的二進(jìn)制數(shù)是0000 0001,最高位是符號(hào)位,所以正確的表示 -1 應(yīng)該是1000 0001,但是這個(gè)答案真的對(duì)嗎?

      計(jì)算機(jī)世界中是沒有減法的,計(jì)算機(jī)在做減法的時(shí)候其實(shí)就是在做加法,也就是用加法來(lái)實(shí)現(xiàn)的減法運(yùn)算。比如 100 - 50 ,其實(shí)計(jì)算機(jī)來(lái)看的時(shí)候應(yīng)該是 100 + (-50),為此,在表示負(fù)數(shù)的時(shí)候就要用到二進(jìn)制補(bǔ)數(shù),補(bǔ)數(shù)就是用正數(shù)來(lái)表示的負(fù)數(shù)。

      為了獲得補(bǔ)數(shù),我們需要將二進(jìn)制的各數(shù)位的數(shù)值全部取反,然后再將結(jié)果 + 1 即可,先記住這個(gè)結(jié)論,下面我們來(lái)演示一下。

      關(guān)于二進(jìn)制世界的秘密

      -1 取反過程

      具體來(lái)說,就是需要先獲取某個(gè)數(shù)值的二進(jìn)制數(shù),然后對(duì)二進(jìn)制數(shù)的每一位做取反操作(0 ---> 1 , 1 ---> 0),最后再對(duì)取反后的數(shù) +1 ,這樣就完成了補(bǔ)數(shù)的獲取。

      補(bǔ)數(shù)的獲取,雖然直觀上不易理解,但是邏輯上卻非常嚴(yán)謹(jǐn),比如我們來(lái)看一下 1 - 1 的這個(gè)過程,我們先用上面的這個(gè) 1000 0001(它是1的補(bǔ)數(shù),不知道的請(qǐng)看上文,正確性先不管,只是用來(lái)做一下計(jì)算)來(lái)表示一下

      關(guān)于二進(jìn)制世界的秘密

      1 - 1 分析圖

      奇怪,1 - 1 會(huì)變成 130 ,而不是0,所以可以得出結(jié)論 1000 0001表示 -1 是完全錯(cuò)誤的。

      那么正確的該如何表示呢?其實(shí)我們上面已經(jīng)給出結(jié)果了,那就是 1111 1111,來(lái)論證一下它的正確性

      關(guān)于二進(jìn)制世界的秘密

      1 - 1 正確的分析圖

      我們可以看到 1 - 1 其實(shí)實(shí)際上就是 1 + (-1),對(duì) -1 進(jìn)行上面的取反 + 1 后變?yōu)?1111 1111, 然后與 1 進(jìn)行加法運(yùn)算,得到的結(jié)果是九位的1 0000 0000,結(jié)果發(fā)生了溢出,計(jì)算機(jī)會(huì)直接忽略掉溢出位,也就是直接拋掉 最高位 1 ,變?yōu)?code>0000 0000。也就是 0,結(jié)果正確,所以1111 1111表示的就是 -1 。

      所以負(fù)數(shù)的二進(jìn)制表示就是先求其補(bǔ)數(shù),補(bǔ)數(shù)的求解過程就是對(duì)原始數(shù)值的二進(jìn)制數(shù)各位取反,然后將結(jié)果 + 1,

      當(dāng)然,結(jié)果不為 0 的運(yùn)算同樣也可以通過補(bǔ)數(shù)求得正確的結(jié)果。不過,有一點(diǎn)需要注意,當(dāng)運(yùn)算結(jié)果為負(fù)的時(shí)候,計(jì)算結(jié)果的值也是以補(bǔ)數(shù)的形式出現(xiàn)的,比如 3 - 5 這個(gè)運(yùn)算,來(lái)看一下解析過程

      關(guān)于二進(jìn)制世界的秘密

      3 - 5 的解析過程

      3 - 5 的運(yùn)算,我們按著上面的思路來(lái)過一遍,計(jì)算出來(lái)的結(jié)果是 1111 1110,我們知道,這個(gè)數(shù)值肯定表示負(fù)數(shù),但是負(fù)數(shù)無(wú)法直接用十進(jìn)制表示,需要對(duì)其取反+ 1,算出來(lái)的結(jié)果是 2,因?yàn)?code>1111 1110的高位是 1,所以最終的結(jié)果是 -2。

      編程語(yǔ)言的數(shù)據(jù)類型中,有的可以處理負(fù)數(shù),有的不可以。比如 C語(yǔ)言中不能處理負(fù)數(shù)的 unsigned short類型,也有能處理負(fù)數(shù)的short類型 ,都是兩個(gè)字節(jié)的變量,它們都有 2 的十六次冪種值,但是取值范圍不一樣,short 類型的取值范圍是 -32768 - 32767 , unsigned short 的取值范圍是 0 - 65536。

      仔細(xì)思考一下補(bǔ)數(shù)的機(jī)制,就能明白 -32768 比 32767 多一個(gè)數(shù)的原因了,最高位是 0 的正數(shù)有 0 ~ 32767 共 32768 個(gè),其中包括0。最高位是 1 的負(fù)數(shù),有 -1 ~ -32768 共 32768 個(gè),其中不包含0。0 雖然既不是正數(shù)也不是負(fù)數(shù),但是考慮到其符號(hào)位,就將其歸為了正數(shù)。

      算數(shù)右移和邏輯右移的區(qū)別

      在了解完補(bǔ)數(shù)后,我們重新考慮一下右移這個(gè)議題,右移在移位后空出來(lái)的最高位有兩種情況 0 和 1。當(dāng)二進(jìn)制數(shù)的值表示圖形模式而非數(shù)值時(shí),移位后需要在最高位補(bǔ)0,類似于霓虹燈向右平移的效果,這就被稱為邏輯右移

      關(guān)于二進(jìn)制世界的秘密

      邏輯右移示意圖

      將二進(jìn)制數(shù)作為帶符號(hào)的數(shù)值進(jìn)行右移運(yùn)算時(shí),移位后需要在最高位填充移位前符號(hào)位的值( 0 或 1)。這就被稱為算數(shù)右移。如果數(shù)值使用補(bǔ)數(shù)表示的負(fù)數(shù)值,那么右移后在空出來(lái)的最高位補(bǔ) 1,就可以正確的表示1/2,1/4,1/8等的數(shù)值運(yùn)算。如果是正數(shù),那么直接在空出來(lái)的位置補(bǔ) 0 即可。

      下面來(lái)看一個(gè)右移的例子。將 -4 右移兩位,來(lái)各自看一下移位示意圖

      關(guān)于二進(jìn)制世界的秘密

      邏輯右移和算數(shù)右移示意圖

      如上圖所示,在邏輯右移的情況下, -4 右移兩位會(huì)變成 63, 顯然不是它的 1/4,所以不能使用邏輯右移,那么算數(shù)右移的情況下,右移兩位會(huì)變?yōu)?code>-1,顯然是它的 1/4,故而采用算數(shù)右移。

      那么我們可以得出來(lái)一個(gè)結(jié)論:左移時(shí),無(wú)論是圖形還是數(shù)值,移位后,只需要將低位補(bǔ) 0 即可;右移時(shí),需要根據(jù)情況判斷是邏輯右移還是算數(shù)右移。

      下面介紹一下符號(hào)擴(kuò)展:將數(shù)據(jù)進(jìn)行符號(hào)擴(kuò)展是為了產(chǎn)生一個(gè)位數(shù)加倍、但數(shù)值大小不變的結(jié)果,以滿足有些指令對(duì)操作數(shù)位數(shù)的要求,例如倍長(zhǎng)于除數(shù)的被除數(shù),再如將數(shù)據(jù)位數(shù)加長(zhǎng)以減少計(jì)算過程中的誤差。

      以8位二進(jìn)制為例,符號(hào)擴(kuò)展就是指在保持值不變的前提下將其轉(zhuǎn)換成為16位和32位的二進(jìn)制數(shù)。將0111 1111這個(gè)正的 8位二進(jìn)制數(shù)轉(zhuǎn)換成為 16位二進(jìn)制數(shù)時(shí),很容易就能夠得出0000 0000 0111 1111這個(gè)正確的結(jié)果,但是像1111 1111這樣的補(bǔ)數(shù)來(lái)表示的數(shù)值,該如何處理?直接將其表示成為1111 1111 1111 1111就可以了。也就是說,不管正數(shù)還是補(bǔ)數(shù)表示的負(fù)數(shù),只需要將 0 和 1 填充高位即可。

      邏輯運(yùn)算的竅門

      掌握邏輯和運(yùn)算的區(qū)別是:將二進(jìn)制數(shù)表示的信息作為四則運(yùn)算的數(shù)值來(lái)處理就是算數(shù),像圖形那樣,將數(shù)值處理為單純的01的羅列就是邏輯

      計(jì)算機(jī)能夠處理的運(yùn)算,大體可分為邏輯運(yùn)算和算數(shù)運(yùn)算,算數(shù)運(yùn)算指的是加減乘除四則運(yùn)算;邏輯運(yùn)算指的是對(duì)二進(jìn)制各個(gè)數(shù)位的 0 和 1分別進(jìn)行處理的運(yùn)算,包括邏輯非(NOT運(yùn)算)、邏輯與(AND運(yùn)算)、邏輯或(OR運(yùn)算)和邏輯異或(XOR運(yùn)算)四種。

      ·邏輯非指的是將 0 變成 1,1 變成 0 的取反操作·邏輯與指的是'兩個(gè)都是 1 時(shí),運(yùn)算結(jié)果才是 1,其他情況下是 0'·邏輯或指的是'至少有一方是 1 時(shí),運(yùn)算結(jié)果為 1,其他情況下運(yùn)算結(jié)果都是 0'·邏輯異或指的是 '其中一方是 1,另一方是 0時(shí)運(yùn)算結(jié)果才是 1,其他情況下是 0'

      關(guān)于二進(jìn)制世界的秘密

      與或非異或真值表

      掌握邏輯運(yùn)算的竅門,就是要摒棄二進(jìn)制數(shù)表示數(shù)值這一個(gè)想法。大家不要把二進(jìn)制數(shù)表示的值當(dāng)作數(shù)值,應(yīng)該把它看成是 開關(guān)上的 ON/OFF。

      文章參考:

      《程序是怎樣跑起來(lái)的》

      < END >

      如果你喜歡這篇文章,歡迎在看、轉(zhuǎn)發(fā)哦。

      讓我們努力向前奔跑吧!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多