當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式微處理器
[導(dǎo)讀]真值很好理解,就是十進制的數(shù)字前面再加上正負(fù)號,這是人類可以簡單識別的數(shù)字,比如 0、±16、±1084、±10.34、±100.453 等,而正數(shù)前面的+符號可以省略。機器值從字面理解就是機器(計算機)識別的值,實際上也確實是這個意思。


真值與機器值


真值很好理解,就是十進制的數(shù)字前面再加上正負(fù)號,這是人類可以簡單識別的數(shù)字,比如 0、±16、±1084、±10.34、±100.453 等,而正數(shù)前面的+符號可以省略。機器值從字面理解就是機器(計算機)識別的值,實際上也確實是這個意思。


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


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


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


符號位與數(shù)值位


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


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


原碼、反碼和補碼


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


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


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


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



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


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


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

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

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

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

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

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

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

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

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


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


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


通過上面的分析可以知道,使用補碼可以將所有計算都轉(zhuǎn)化為加法計算,這樣可以讓計算機底層對于整數(shù)計算變得簡單,反碼屬于歷史遺留,因為其存在±0的問題。


END

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

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


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

推薦閱讀

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

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

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

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

嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉