計(jì)算機(jī)組成原理之源碼、反碼、補(bǔ)碼詳解及Byte結(jié)構(gòu)

本文基礎(chǔ)知識(shí)大部分來自于大學(xué)學(xué)習(xí)的 計(jì)算機(jī)組成原理,計(jì)算機(jī)科學(xué)技術(shù)導(dǎo)論等教材
引論
編程語言中,多數(shù)都會(huì)由byte類型,那byte類型是一個(gè)什么樣的概念呢,占用字節(jié)數(shù)為1,為什么值范圍是-128~127呢,帶著這樣的疑問我們進(jìn)入話題
十進(jìn)制數(shù) 97 和-97對(duì)應(yīng)的二進(jìn)制 1100001 和 -1100001
在數(shù)學(xué)中,是將正號(hào)“十”和負(fù)號(hào)“一”放在絕對(duì)值前面來表示該數(shù)是正數(shù)還是負(fù)數(shù)的。而在計(jì)算機(jī)中則使用符號(hào)位來表示正、負(fù)數(shù)。符號(hào)位規(guī)定放在數(shù)的最前面,并用“0”表示正數(shù),用“1”表示負(fù)數(shù)。這樣,數(shù)的符號(hào)也數(shù)碼化了。在計(jì)算機(jī)中,負(fù)數(shù)有三種表示方法:原碼、反碼和補(bǔ)碼。任何正數(shù)的原碼、補(bǔ)碼和反碼的形式完全相同,而負(fù)數(shù)則有各種不同的表示形式。為區(qū)分起見,將原來用一般形式表示的數(shù)X稱為機(jī)器數(shù)的真值,而將數(shù)在計(jì)算機(jī)內(nèi)的各種編碼表示稱為機(jī)器數(shù),根據(jù)表示方法的不同分別記為[X]原、[X]反和[X]補(bǔ)等
在由日常數(shù)據(jù)轉(zhuǎn)換為計(jì)算機(jī)硬件能夠直接識(shí)別、處理的機(jī)器數(shù)時(shí),需要解決三個(gè)問題
1. 只能采用二進(jìn)制數(shù),每位數(shù)碼非0即1;
2. 將符號(hào)位數(shù)字化,如用0表示正號(hào),用1表示負(fù)號(hào);
3. 采用什么編碼方法表示數(shù)值。
一、原碼、補(bǔ)碼、反碼
原碼
原碼表示法約定:讓數(shù)碼序列的最高位為符號(hào)位,符號(hào)位為0表示該數(shù)為正,為1表示該數(shù)為負(fù);數(shù)碼序列的其余部分為有效數(shù)值,用二進(jìn)制數(shù)絕對(duì)值表示。
97對(duì)應(yīng)的 原碼:0 1100001 -97對(duì)應(yīng)的原碼:1 1100001
反碼
正數(shù)的反碼是其本身(等于原碼);負(fù)數(shù)的反碼是將原碼中除符號(hào)位以外的所有位(數(shù)值位)取反,也就是 0 變成 1,1 變成 0
97 的 原碼和反碼都是:0 1100001
-97 的原碼:1 1100001
-97 的反碼:1 0011110
補(bǔ)碼
假設(shè) 我們用原碼進(jìn)行加減法操作,示例 十進(jìn)制 -2 對(duì)應(yīng)二進(jìn)制 1 0000010,十進(jìn)制 3 對(duì)應(yīng)二進(jìn)制 0 0000011,正數(shù)之間是不會(huì)有問題的,但負(fù)數(shù)相加就會(huì)出現(xiàn)一些問題
為了克服原碼表示法在加、減運(yùn)算中的缺點(diǎn),引入了補(bǔ)碼表示法,并以此作為加、減運(yùn)算的基礎(chǔ)。引入補(bǔ)碼表示法的目的是:讓符號(hào)位也作為數(shù)值的一部分直接參與運(yùn)算,以簡(jiǎn)化加、減運(yùn)算的規(guī)則,同時(shí)又能化減為加。下面舉個(gè)例子說明補(bǔ)碼的思想:
如 時(shí)鐘。時(shí)鐘以12為一個(gè)計(jì)數(shù)循環(huán),在有模運(yùn)算中稱為“以12為模”。13點(diǎn)舍去模12后,就是1點(diǎn)。從0點(diǎn)位置出發(fā),沿反時(shí)針方向?qū)r(shí)針撥動(dòng)-1格(即-1點(diǎn)),等同于沿順時(shí)針方向撥動(dòng)11格(即11點(diǎn))。換句話說,在以12為模的前提下,-1可以映射為+11。由此我們得到啟發(fā):在有模運(yùn)算中,一個(gè)負(fù)數(shù)可以用一個(gè)與它互為補(bǔ)碼的正數(shù)來代替。
補(bǔ)碼示例
注:數(shù)的原碼表示形式簡(jiǎn)單,適合于進(jìn)行乘除運(yùn)算,但用原碼表示的數(shù)進(jìn)行加減運(yùn)算比較復(fù)雜。引入補(bǔ)碼以后,減法運(yùn)算可以使用加法來實(shí)現(xiàn),且數(shù)的符號(hào)位也可以當(dāng)作運(yùn)算值一樣參加運(yùn)算,因此在計(jì)算機(jī)中大都采用補(bǔ)碼來進(jìn)行加減運(yùn)算。
二、Byte結(jié)構(gòu)
在絕大多數(shù)語言中 Byte結(jié)構(gòu)都是 1字節(jié) 范圍 [-128,127]
這個(gè)參考上文講的 機(jī)器數(shù) 是計(jì)算機(jī)里存儲(chǔ)的,計(jì)算機(jī)可以識(shí)別的數(shù),所以 Byte 1字節(jié)是8位,可以表示的范圍是 0000 0000 ~ 1111 1111,注意此處存儲(chǔ)的是 原數(shù)值的補(bǔ)碼
正數(shù)部分:正數(shù)的補(bǔ)碼還是自己,即 0000 0000 ~ 0111 1111 表示范圍是 [0,127] ,
負(fù)數(shù)部分:負(fù)數(shù)的補(bǔ)碼 是該數(shù)的原碼除負(fù)號(hào)位外各位取反,然后在最后一位加1,
即 1111 1111 ~ 1000 0000 對(duì)應(yīng)的原值 1 0000 0000 ~ 1000 0001 即為 [-128,-1]
注意:其實(shí)有的時(shí)候很難理解 把 1000 0000 轉(zhuǎn)換為 -128,這個(gè)原因是 高位被截?cái)啵鋵?shí)他的原碼應(yīng)該是 1 0000 0000 然后取補(bǔ)碼得到 1000 0000
以下為Java代碼示例
到此這篇關(guān)于計(jì)算機(jī)組成原理之源碼、反碼、補(bǔ)碼詳解及Byte結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)源碼、反碼、補(bǔ)碼詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
電腦提示找不到libcef.dll無法繼續(xù)執(zhí)行代碼怎么辦? libcef.dll丟失修復(fù)
在使用電腦的過程中,你可能會(huì)突然遇到諸如“找不到libcef.dll”或者“由于缺少libcef.dll,程序無法啟動(dòng)”之類的惱人提示,下面我們就來看看詳細(xì)解決辦法2025-04-23電腦提示由于找不到d3dx9_43.dll如何解決? d3dx9_43.dll文件丟失修復(fù)技
在使用Windows操作系統(tǒng)運(yùn)行某些應(yīng)用程序(尤其是游戲或圖形密集型軟件)時(shí),用戶可能會(huì)遇到“d3dx9_43.dll文件丟失”的錯(cuò)誤提示,這一錯(cuò)誤不僅影響程序的正常啟動(dòng),還可能2025-04-23電腦死機(jī)無反應(yīng)怎么強(qiáng)制重啟? 一文讀懂方法及注意事項(xiàng)
在日常使用電腦的過程中,我們難免會(huì)遇到電腦無法正常啟動(dòng)的情況,本文將詳細(xì)介紹幾種常見的電腦強(qiáng)制開機(jī)方法,并探討在強(qiáng)制開機(jī)后應(yīng)注意的事項(xiàng),以及如何從根本上解決電腦2025-04-16電腦如何通過數(shù)據(jù)線連接手機(jī)網(wǎng)絡(luò)? 電腦上網(wǎng)不再受限的技巧
今天我來分享一下如何用USB線把臺(tái)式電腦連接到手機(jī)的網(wǎng)絡(luò)上,其實(shí)操作非常簡(jiǎn)單,只需要幾步就搞定了,讓我們一起來看看吧2025-04-15分辨率三兄弟LPI、DPI 和 PPI有什么區(qū)別? 搞清分辨率的那些事兒
分辨率這個(gè)東西,真的是讓人又愛又恨,為了搞清楚它,我可是翻閱了不少資料,最后發(fā)現(xiàn)“小7的背包”的解釋最讓我茅塞頓開,于是,我決定整理一下,給大家分享一下我的理解2025-04-03空格符號(hào)怎么打? 全角空格和半角空格的區(qū)別介紹
你是否曾想過,為什么鍵盤上的空格鍵有時(shí)并不能滿足我們的需求?其實(shí),空格鍵輸入的空格分為全角和半角兩種2025-03-31mss32.dll文件丟失怎么辦? 電腦提示mss32.dll丟失的多種修復(fù)方法
最近,很多電腦用戶可能遇到了mss32.dll文件丟失的問題,導(dǎo)致一些應(yīng)用程序無法正常啟動(dòng),那么,如何修復(fù)這個(gè)問題呢?別擔(dān)心,本文將詳細(xì)介紹mss32.dll文件的作用和丟失原因2025-03-26電腦提示找不到openal32.dll文件怎么辦? openal32.dll丟失完美修復(fù)方法
openal32.dll是一種重要的系統(tǒng)文件,當(dāng)它丟失時(shí),會(huì)給我們的電腦帶來很大的困擾,很多人都曾經(jīng)遇到過這個(gè)問題,但你知道該如何解決嗎?詳細(xì)請(qǐng)看下文介紹2025-03-26電腦win32spl.dll文件丟失咋辦? win32spl.dll丟失無法連接打印機(jī)修復(fù)技
電腦突然提示win32spl.dll文件丟失,打印機(jī)死活連不上,今天就來給大家詳細(xì)講解一下這個(gè)問題的解決方法,手把手教你如何搞定win32spl.dll丟失的問題,讓你輕松恢復(fù)打印機(jī)連2025-03-26電腦提示binkw32.dll缺失怎么辦? 教你輕松解決binkw32.dll丟失問題修復(fù)
電腦上玩游戲時(shí),突然彈出“計(jì)算機(jī)丟失binkw32.dll”的錯(cuò)誤提示,是不是讓你瞬間抓狂?別擔(dān)心,今天就來手把手教你如何解決這個(gè)問題2025-03-26