日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

计算机基础- -计算机为什么要使用二进制

發(fā)布時(shí)間:2024/4/11 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机基础- -计算机为什么要使用二进制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

計(jì)算機(jī)基礎(chǔ)- -計(jì)算機(jī)為什么要使用二進(jìn)制

文章目錄

  • 計(jì)算機(jī)基礎(chǔ)- -計(jì)算機(jī)為什么要使用二進(jìn)制
    • 一、為什么用二進(jìn)制表示
    • 二、什么是二進(jìn)制數(shù)
    • 三、移位運(yùn)算和乘除的關(guān)系
    • 四、便于計(jì)算機(jī)處理的補(bǔ)數(shù)
    • 五、算數(shù)右移和邏輯右移的區(qū)別
    • 六、邏輯運(yùn)算的竅門

我們都知道,計(jì)算機(jī)的底層都是使用二進(jìn)制數(shù)據(jù)進(jìn)行數(shù)據(jù)流傳輸?shù)?#xff0c;那么為什么會(huì)使用二進(jìn)制表示計(jì)算機(jī)呢?

或者說(shuō),什么是二進(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)存圖如下:

cpu內(nèi)存
  • CPU和內(nèi)存使用IC電子元件作為基本單元, IC電子元件有不同種形狀, 但是其內(nèi)部的組成單元稱為一個(gè)個(gè)的引腳。
  • 有人說(shuō)CPU和內(nèi)存內(nèi)部都是超大規(guī)模集成電路, 其實(shí)IC就是集成電路(Integrated Circuit) 。
  • IC元件兩側(cè)排列的四方形塊就是引腳,IC的所有引腳,只有兩種電壓:0V和5V,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)?位能夠涵蓋所有的字符編碼👏。
  • 字節(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位表示就是0000000000100111占用兩個(gè)字節(jié)。
  • 我們一般口述的32位和64位的計(jì)算機(jī)一般就指的是處理位數(shù),32位一次可以表示4個(gè)字節(jié),64位一次可以表示8個(gè)字節(jié)的二進(jìn)制數(shù)。
  • 我們一般在軟件開(kāi)發(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ù)呢?為了說(shuō)明這個(gè)問(wèn)題,我們先把00100111這個(gè)數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)看一下
  • 二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),直接將各位置上的值*位權(quán)即可,那么我們將上面的數(shù)值進(jìn)行轉(zhuǎn)換

  • 也就是說(shuō),二進(jìn)制數(shù)代表的00100111轉(zhuǎn)換成十進(jìn)制就是39,這個(gè)39并不是3和9兩個(gè)數(shù)字連著寫(xiě),而是3*10+9*1,這里面的10,1就是位權(quán)
  • 以此類推,上述例子中的位權(quán)從高位到低位依次就是76543210。這個(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,以此類推。
  • 那么我們所說(shuō)的二進(jìn)制數(shù)其實(shí)就是用0和1兩個(gè)數(shù)字來(lái)表示的數(shù),它的基數(shù)為2,它的數(shù)值就是每個(gè)數(shù)的位數(shù) * 位權(quán)再求和得到的結(jié)果,我們一般來(lái)說(shuō)數(shù)值指的就是十進(jìn)制數(shù),那么它的數(shù)值就是310+91=39.

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

  • 在了解過(guò)二進(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è)位置上的元素坐左移和右移操作

見(jiàn)下圖:

  • 上述例子中還是以39為例,我們先把十進(jìn)制的39轉(zhuǎn)換為二進(jìn)制的00100111,然后向左移位<<一個(gè)字節(jié),也就變成了01001110,那么再把此二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)就是上面的78,也就是十進(jìn)制的78竟然是十進(jìn)制39的2倍關(guān)系。
  • 我們?cè)谧?0100111左移兩位,也就是10011100,得出來(lái)的值是156,相當(dāng)于擴(kuò)大了四倍!
  • 因此你可以得出來(lái)此結(jié)論,左移相當(dāng)于是數(shù)值擴(kuò)大的操作,那么右移>>呢?
  • 按理說(shuō)右移應(yīng)該是縮小1/2, 1/4倍,但是39縮小二倍和四倍不就變成小數(shù)了嗎?這個(gè)怎么表示呢?

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

  • 剛才我們沒(méi)有介紹右移的情況,是因?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)?的二進(jìn)制數(shù)是00000001,最高位是符號(hào)位,所以正確的表示-1應(yīng)該是10000001,但是這個(gè)答案真的對(duì)嗎?
  • 計(jì)算機(jī)世界中是沒(méi)有減法的,計(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即可

  • 具體來(lái)說(shuō),就是需要先獲取某個(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è)過(guò)程,我們先不求補(bǔ)數(shù),直接用上面的這個(gè)10000001(假設(shè)它是1的補(bǔ)數(shù))來(lái)表示一下

  • 奇怪,1-1會(huì)變成130,而不是0,所以可以得出結(jié)論10000001表示-1是完全錯(cuò)誤的。
  • 那么正確的該如何表示呢?其實(shí)我們上面已經(jīng)給出結(jié)果了,那就是11111111,來(lái)論證一下它的正確性
  • 我們可以看到1-1其實(shí)實(shí)際上就是1+(-1),對(duì)-1進(jìn)行上面的取反+1后變11111111,然后與1進(jìn)行加法運(yùn)算,得到的結(jié)果是九位的100000000。
  • 結(jié)果發(fā)生了溢出,計(jì)算機(jī)會(huì)直接忽略掉溢出位,也就是直接拋掉最高位1,變?yōu)?br /> 00000000。也就是0,結(jié)果正確,所以11111111表示的就是-1。
  • 所以負(fù)數(shù)的二進(jìn)制表示就是先求其補(bǔ)數(shù)(補(bǔ)數(shù)的求解過(guò)程就是對(duì)原始數(shù)值的二進(jìn)制數(shù)各位取反),然后將結(jié)果+1
  • 當(dāng)然,結(jié)果不為0的運(yùn)算同樣也可以通過(guò)補(bǔ)數(shù)求得正確的結(jié)果。
  • 不過(guò),有一點(diǎn)需要注意,當(dāng)運(yùn)算結(jié)果為負(fù)的時(shí)候,計(jì)算結(jié)果的值也是以補(bǔ)數(shù)的形式出現(xiàn)的

比如3-5這個(gè)運(yùn)算,來(lái)看一下解析過(guò)程:

  • 3-5的運(yùn)算,我們按著上面的思路來(lái)過(guò)一遍,計(jì)算出來(lái)的結(jié)果是11111110,我們知道,這個(gè)數(shù)值肯定表示負(fù)數(shù),但是負(fù)數(shù)無(wú)法直接用十進(jìn)制表示,需要對(duì)其取反+1,算出來(lái)的結(jié)果是2,因?yàn)?1111110的高位是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ǔ)O,類似于霓虹燈向右平移的效果,這就被稱為邏輯右移

  • 將二進(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)各自看一下移位示意圖

  • 如上圖所示,在邏輯右移的情況下,-4右移兩位會(huì)變成63,顯然不是它的1/4,所以不能使用邏輯右移,那么算數(shù)右移的情況下,右移兩位會(huì)變?yōu)?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ì)算過(guò)程中的誤差。

  • 以8位二進(jìn)制為例,符號(hào)擴(kuò)展就是指在保持值不變的前提下將其轉(zhuǎn)換成為16位和32位的二進(jìn)制數(shù)。

  • 將01111111這個(gè)正的8位二進(jìn)制數(shù)轉(zhuǎn)換成為16位二進(jìn)制數(shù)時(shí),很容易就能夠得出0000000001111111這個(gè)正確的結(jié)果,

  • 但是像11111111這樣的補(bǔ)數(shù)來(lái)表示的數(shù)值,該如何處理?直接將其表示成為1111111111111111就可以了。

  • 也就是說(shuō),不管正數(shù)還是補(bǔ)數(shù)表示的負(fù)數(shù),只需要將0和1填充高位即可。

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

  • 掌握邏輯和運(yùn)算的區(qū)別是:將二進(jìn)制數(shù)表示的信息作為四則運(yùn)算的數(shù)值來(lái)處理就是算數(shù),像圖形那樣,將數(shù)值處理為單純的0和1的羅列就是邏輯
  • 計(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)算) 和邏輯異或(X OR運(yùn)算) 四種。

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

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

總結(jié)

以上是生活随笔為你收集整理的计算机基础- -计算机为什么要使用二进制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。