欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

position>home>Basketball

二進(jìn)制原碼/反碼/補(bǔ)碼詳解,不懂的請(qǐng)看過來

[導(dǎo)讀]真值很好理解,進(jìn)制就是原碼十進(jìn)制的數(shù)字前面再加上正負(fù)號(hào),這是反碼人類可以簡(jiǎn)單識(shí)別的數(shù)字,比如 0、補(bǔ)碼不懂±16、詳解±1084、看過±10.34、進(jìn)制±100.453 等,原碼而正數(shù)前面的反碼+符號(hào)可以省略。機(jī)器值從字面理解就是補(bǔ)碼不懂機(jī)器(計(jì)算機(jī))識(shí)別的值,實(shí)際上也確實(shí)是詳解這個(gè)意思。


二進(jìn)制原碼/反碼/補(bǔ)碼詳解,不懂的請(qǐng)看過來

真值與機(jī)器值


真值很好理解,看過就是進(jìn)制十進(jìn)制的數(shù)字前面再加上正負(fù)號(hào),這是原碼人類可以簡(jiǎn)單識(shí)別的數(shù)字,比如 0、反碼±16、±1084、±10.34、±100.453 等,而正數(shù)前面的+符號(hào)可以省略。機(jī)器值從字面理解就是機(jī)器(計(jì)算機(jī))識(shí)別的值,實(shí)際上也確實(shí)是這個(gè)意思。


計(jì)算機(jī)中通過高低電平表示1或者0,這樣就可以表示一個(gè)二進(jìn)制的數(shù)值。一個(gè)1或者0表示的數(shù)值位稱為一個(gè)bit,而計(jì)算機(jī)中存儲(chǔ)和傳輸數(shù)據(jù)的最小單位是一個(gè)字節(jié)(byte)也就是8個(gè)bit,所以說計(jì)算機(jī)所有計(jì)算本質(zhì)上都是基于二進(jìn)制。


在計(jì)算機(jī)中,我們可以使用1個(gè)或者多個(gè)字節(jié)存儲(chǔ)一個(gè)數(shù),但無論是多少個(gè)字節(jié),其大小肯定是固定的,同時(shí)其所能表示的數(shù)值的范圍也是固定的。比如說對(duì)使用1個(gè)字節(jié)存儲(chǔ)的數(shù)進(jìn)行計(jì)算或者傳輸,那么這個(gè)數(shù)所能表示的最小值為00000000最大值為11111111,轉(zhuǎn)換為十進(jìn)制為0 ~ 255。那么無論對(duì)這個(gè)數(shù)做了什么計(jì)算,無論計(jì)算之后的結(jié)果為多少都不能超出這個(gè)范圍,同理使用2個(gè)字節(jié)存儲(chǔ)的數(shù)范圍為0 ~ 65535。


由于很多時(shí)候一個(gè)數(shù)據(jù)需要使用2個(gè)或者2個(gè)以上的字節(jié)表示,那么這種數(shù)據(jù)無論是存儲(chǔ)還是傳輸?shù)臅r(shí)候都會(huì)有一個(gè)順序的問題,也就是大小端對(duì)齊(字節(jié)序)問題。在存儲(chǔ)時(shí)高位字節(jié)在前為大端對(duì)齊,反之為小端對(duì)齊。在數(shù)據(jù)傳輸時(shí)先傳輸高位字節(jié)為大端字節(jié)序,反之為小端字節(jié)序。目前絕大多數(shù)平臺(tái)內(nèi)部都是小端對(duì)齊的方式存儲(chǔ)數(shù)據(jù),而大多數(shù)通信協(xié)議卻都是用大端字節(jié)序傳輸數(shù)據(jù),所以這一點(diǎn)值得注意一下。


符號(hào)位與數(shù)值位


計(jì)算機(jī)中使用二進(jìn)制存儲(chǔ)傳輸和計(jì)算數(shù)值,但是不能只有數(shù)值,計(jì)算的時(shí)候還得有正負(fù)之分。在計(jì)算機(jī)中使用最高bit位的數(shù)值來表示正負(fù)號(hào),這個(gè)bit位稱作符號(hào)位。


計(jì)算機(jī)中符號(hào)位的值為0表示這個(gè)數(shù)為正數(shù),符號(hào)位值為1表示這個(gè)樹為負(fù)數(shù)。由于符號(hào)位表示符號(hào)所以其不表示具體的值,除開符號(hào)位剩余的bit位用來表示數(shù)值也就是數(shù)值位。比如1個(gè)字節(jié)的整數(shù)00000001,其中最高bit(最左邊)位的0為符號(hào)位,表示這個(gè)數(shù)為正數(shù),數(shù)值位為1,所以其真值為1。同理2個(gè)字節(jié)的整數(shù)00000000_0000001,其真值也是1。


原碼、反碼和補(bǔ)碼


計(jì)算機(jī)只識(shí)別機(jī)器碼,其實(shí)也就是二進(jìn)制數(shù),并且使用最高bit位表示符號(hào)位。那么兩個(gè)真值為8和-8的8位整數(shù),它們?cè)谟?jì)算機(jī)內(nèi)部的機(jī)器值是否就分別是00001000和10001000?其實(shí)并不是,這只是8和-8的原碼,而機(jī)器算計(jì)中的機(jī)器值是使用補(bǔ)碼存儲(chǔ)和計(jì)算的。


計(jì)算機(jī)中,正數(shù)的原碼、反碼和補(bǔ)碼是一樣的,所以上面那個(gè)例子中,真值為8的8位整數(shù)的機(jī)器值確實(shí)是00001000,但是-8就不是這么回事了。負(fù)數(shù)的首先將原碼數(shù)值位按位取反得到反碼,然后再將反碼數(shù)值位加1之后則得到補(bǔ)碼。我們來看一下-8這個(gè)例子,其原碼為10001000,數(shù)值位按位取反之后的反碼為11110111,然后數(shù)值位加1之后的補(bǔ)碼為11111000。所以真值為-8的8位整數(shù)在計(jì)算機(jī)中的機(jī)器值為11111000,我們來看下面這張表:


注:int8為8bit位整數(shù)占用1byte,int16為16bit位整數(shù)占用2byte。


剛說的是原碼轉(zhuǎn)補(bǔ)碼的步驟,其實(shí)補(bǔ)碼轉(zhuǎn)原碼的步驟是一樣的。首先正數(shù)的原碼補(bǔ)碼是一樣的不需要轉(zhuǎn)換,我們看負(fù)數(shù)11111000,首先將數(shù)值位按位取反得到10000111,然后再將數(shù)值位加1得到10001000。我們?cè)賮砜匆粋€(gè)8位的整數(shù)10000000,是不是發(fā)現(xiàn)這個(gè)數(shù)原碼和補(bǔ)碼是一樣的,那么這個(gè)看起來像是“-0”的數(shù)是怎么回事呢?其實(shí)可以將這個(gè)數(shù)看成是一個(gè)特殊值,它的真實(shí)含義就是最小值。8位的這種“-0”的真值為-128,16位的這種“-0”真值為-32768。所以只需要記住100...000這種補(bǔ)碼就是最小值就行,我們看下面的這張表:



有兩對(duì)8bit位的整數(shù)4、8和4、-8,我們分別看一下他們?cè)谟?jì)算機(jī)中是怎么做加法計(jì)算的。首先看4和8的補(bǔ)碼分別為00000100和00001000,只需要將每個(gè)bit位相加就行,結(jié)果為00001100,其真值為12。我們?cè)賮?和-8的計(jì)算,它們補(bǔ)碼分別為00000100和11111000,然后將它們按位相加(注意符號(hào)位也要做加法)得到11111100,其原碼為10000100,真值為-4。


再來看一下減法計(jì)算,比如8bit位的整數(shù)-8減去4,首先可以將4處理一下可以變?yōu)?-8) + (-4),這樣是不是就又變?yōu)榱思臃耍?8和-4的補(bǔ)碼分別為11111000和11111100,將它們按位相加得到補(bǔ)碼11110100(注意這是8位的整數(shù),超出部分發(fā)生了溢出),轉(zhuǎn)換成原碼為10001100,真值為-12。


再來看一下乘法,比如8bit位的整數(shù)-8乘以13,他們的補(bǔ)碼分別為11111000和00001101。其中-8為被乘數(shù),13為乘數(shù),并且乘數(shù)有8個(gè)bit位,需要將被乘數(shù)按位與和位計(jì)算8次然后將結(jié)果相加,看如下分析:

  • 被乘數(shù)的第0個(gè)bit位值為1,將被乘數(shù)乘以1然后左移0位得到:11111000;

  • 被乘數(shù)的第1個(gè)bit位值為0,將被乘數(shù)乘以0然后左移1位得到:00000000;

  • 被乘數(shù)的第2個(gè)bit位值為1,將被乘數(shù)乘以1然后左移2位得到;11100000;

  • 被乘數(shù)的第3個(gè)bit位值為1,將被乘數(shù)乘以1然后左移3位得到;11000000;

  • 被乘數(shù)的第4個(gè)bit位值為0,將被乘數(shù)乘以0然后左移4位得到;00000000;

  • 被乘數(shù)的第5個(gè)bit位值為0,將被乘數(shù)乘以0然后左移5位得到;00000000;

  • 被乘數(shù)的第6個(gè)bit位值為0,將被乘數(shù)乘以0然后左移6位得到;00000000;

  • 被乘數(shù)的第7個(gè)bit位值為0,將被乘數(shù)乘以0然后左移7位得到;00000000;


由此可以得計(jì)算得到8組補(bǔ)碼(注意上面做位移涉及到的整數(shù)溢出,只能是8個(gè)bit位),然后將它們做加法得到10011000(也存在整數(shù)溢出)轉(zhuǎn)換為原碼為11101000,真值為-104。


至于除法則是使用交替加減法的方式,本文只是對(duì)計(jì)算原理做一下擴(kuò)展,這里不再繼續(xù)深入做介紹,如果有想了解的可以自行上網(wǎng)查詢。


通過上面的分析可以知道,使用補(bǔ)碼可以將所有計(jì)算都轉(zhuǎn)化為加法計(jì)算,這樣可以讓計(jì)算機(jī)底層對(duì)于整數(shù)計(jì)算變得簡(jiǎn)單,反碼屬于歷史遺留,因?yàn)槠浯嬖凇?的問題。


END

節(jié)選自《二進(jìn)制小總結(jié)》

https://www.cnblogs.com/lbole/p/14260496.html


版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。

▍ 推薦閱讀

成功為華為“續(xù)命:中國(guó)芯片之父張汝京

一個(gè)工程師的“噩夢(mèng)”:剛分清CPU和GPU,卻發(fā)現(xiàn)還有……

這位“華為天才少年”,竟然要我用“充電寶”打《只狼》

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

Popular articles

主站蜘蛛池模板: 久久99久久99精品免观看| 男男动漫全程肉无删减有什么| 美女被男人扒开腿猛视频| 十六以下岁女子毛片免费| 国产精品视频不卡| 嗯~啊~哦~别~别停~啊老师| aaaaaa级特色特黄的毛片| 一级国产电影| 乱人伦中文字幕电影| 日本三人交xxx69| 久久一日本道色综合久久m| 国产精品一区二区久久精品涩爱| 日韩插插插| 日本在线理论片| 国产精品成人久久久久久久| 性的暴力电影| 中文字幕精品一区二区精品| 国产成人免费a在线资源| 欧洲美女与动zooz| 久久久噜噜噜久久中文字幕色伊伊 | 久久人人爽人人爽人人片av不| 污视频软件大全| gay肌肉猛男gay激情狂兵| 岛国片在线免费观看| 亚洲另类视频在线观看| 女人是男人的女未来1分49分 | 亚洲欧美成aⅴ人在线观看| 亚洲大成色www永久网站| 亚洲最大成人网色| 欧美视频亚洲视频| 野花日本免费观看高清电影8| 一级免费毛片| 两个人看的www视频免费完整版| 狠狠色狠狠色综合网| 女人张开腿让男人桶个爽| 久久久久久久久久国产精品免费| 日本精品久久久久中文字幕| 豪妇荡乳1一5白玉兰免费下载| 国产乱码卡一卡2卡三卡四 | 美女扒开胸露出奶乳免费视频| 小受被强攻按做到哭男男|