您好,登錄后才能下訂單哦!
這篇文章主要介紹“計(jì)算機(jī)中一個(gè)byte的存儲(chǔ)范圍是多少”,在日常操作中,相信很多人在計(jì)算機(jī)中一個(gè)byte的存儲(chǔ)范圍是多少問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”計(jì)算機(jī)中一個(gè)byte的存儲(chǔ)范圍是多少”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
我們知道,對(duì)于有符號(hào)類型,計(jì)算機(jī)在處理的時(shí)候會(huì)把最高位當(dāng)做符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)。舉例來說(以下舉例均針對(duì)8位有符號(hào)數(shù)):
0000 0001即為1,1000 0001即為-1,那么很容易得到8位有符號(hào)數(shù)值的表示范圍應(yīng)該是1111 1111 ~ 0111 1111,也就是-127~127,問題來了,-128是怎么來的呢?
在說明這個(gè)問題之前,先來補(bǔ)充點(diǎn)額外的知識(shí):
在計(jì)算機(jī)的存儲(chǔ)和計(jì)算中,統(tǒng)一的是采用補(bǔ)碼進(jìn)行處理和運(yùn)算的,在弄清楚采用補(bǔ)碼的好處之前,我們需要明確如下三個(gè)概念:
原碼:是一種計(jì)算機(jī)中對(duì)數(shù)字的二進(jìn)制定點(diǎn)表示方法。原碼表示法在數(shù)值前面增加了一位符號(hào)位(即最高位為符號(hào)位):正數(shù)該位為0,負(fù)數(shù)該位為1(0有兩種表示:+0和-0),其余位表示數(shù)值的大小。
反碼:正數(shù)的反碼與其原碼相同;負(fù)數(shù)的反碼是對(duì)其原碼逐位取反,但符號(hào)位除外。
補(bǔ)碼:正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼等于其反碼+1。
很明顯,文章開頭的舉例即是原碼,它很符合我們的直觀感覺,但是在計(jì)算的時(shí)候麻煩就來了,如果直接運(yùn)算,例如1+(-1)=0,運(yùn)算的時(shí)候0000 0001 + 1000 0001 = 1000 0010(-2),很顯然是錯(cuò)誤的,因此符號(hào)位和數(shù)值位必須分開處理!這會(huì)增加計(jì)算機(jī)的硬件開銷。我們換成補(bǔ)碼試試,1的原碼0000 0001,反碼0000 0001,補(bǔ)碼0000 0001(正數(shù)三者一致);-1的原碼1000 0001,反碼1111 1110,補(bǔ)碼1111 1111(1111 1110 + 0000 0001);因此1+(-1)用補(bǔ)碼來運(yùn)算就是0000 0001 + 1111 11111 = 0000 0000(最高位溢出舍棄),結(jié)果是正確的。
由此可見,可以將減法運(yùn)算轉(zhuǎn)化成加法運(yùn)算,計(jì)算機(jī)只需要實(shí)現(xiàn)加法電路即可,并且原碼到補(bǔ)碼的轉(zhuǎn)換和補(bǔ)碼到原碼的轉(zhuǎn)換過程是完全一致的,為什么?可以簡單證明如下:
假設(shè)32位機(jī)器,X為負(fù)數(shù)(最高位是符號(hào)位,對(duì)于負(fù)數(shù),即為1),則有X(絕對(duì)值)+X(反)=0xFFFFFFFFF,因此X(絕對(duì)值)+X(反)+1=0xFFFFFFFFF+1=0;所以得到 0-X(絕對(duì)值)=X(反)+1,根據(jù)之前的定義X(反)+1即為X的補(bǔ)碼,于是有X(補(bǔ))=X(反)+1=0-X(絕對(duì)值);
1)那么對(duì)于A、B>0,令K=-B,顯然K是負(fù)數(shù),那么有A-B=A+(0-K(絕對(duì)值))=A+K(補(bǔ)),減法運(yùn)算就轉(zhuǎn)化成了加法運(yùn)算。
2)X(絕對(duì)值)=0-X(補(bǔ));兩邊同時(shí)乘以-1 得到-X(絕對(duì)值)=-0-(-X(補(bǔ)))=0-(X(補(bǔ)(絕對(duì)值)))=X(補(bǔ))(反)+1;-X(絕對(duì)值)即為原碼X;因此上式說明了原碼X等于X的補(bǔ)碼取反后加一,也就是說X補(bǔ)碼的補(bǔ)碼就是原碼。不論是原碼求補(bǔ)碼還是補(bǔ)碼求原碼方式完全一致。
回到最開始的問題,8位有符號(hào)數(shù)值的最小值為什么是-128而不是-127呢,我們列出來部分原碼、反碼和補(bǔ)碼的對(duì)照表看看:
從上表中我們可以看出,0在原碼和反碼中有兩種表示方式,而對(duì)應(yīng)的補(bǔ)碼只有一種表示方式,-128在原碼和反碼中無法表示,在補(bǔ)碼中卻可以表示(用-127的補(bǔ)碼1000 0001減1得到1000 0000)。而計(jì)算機(jī)中數(shù)值以補(bǔ)碼形式存儲(chǔ)和運(yùn)算,當(dāng)然-128可以表示出來,因此8位有符號(hào)數(shù)值的范圍是-128~127,同理其他位數(shù)(16、32、64)也可以以此類推。
說白了就是 在 -0 跟+0 的源碼 一個(gè)是 1000 0000 跟 0000 0000 這倆個(gè)是重復(fù)的,但是-0不要浪費(fèi)了 跟補(bǔ)碼是一樣的 讓它表示-128也可以。
到此,關(guān)于“計(jì)算機(jī)中一個(gè)byte的存儲(chǔ)范圍是多少”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。