詳解原碼、反碼與補(bǔ)碼存儲(chǔ)與大小
詳解原碼、反碼與補(bǔ)碼存儲(chǔ)與大小
原碼:
如果機(jī)器字長(zhǎng)為N個(gè)bit,那么一個(gè)數(shù)的原碼就是N位二進(jìn)制數(shù),最高位
是符號(hào)位,1代表負(fù)數(shù),0代表正數(shù)。
反碼:
正數(shù)的反碼就是原碼,負(fù)數(shù)的反碼就是符號(hào)位不變,其他取反。
補(bǔ)碼:
正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是在其反碼的末位加1。
(計(jì)算機(jī)中的數(shù)都是以補(bǔ)碼形式存儲(chǔ)的)
補(bǔ)碼的形式是為了進(jìn)行正負(fù)數(shù)二進(jìn)制的加減操作
char為1個(gè)字節(jié),8個(gè)bit位,看看內(nèi)存中是怎么存儲(chǔ)的
十六進(jìn)制 二進(jìn)制(補(bǔ)碼) 反碼 原碼 實(shí)際值 char a = 127; //7f 0111 1111 127 char b = 128; //80 1000 0000 0111 1111 1000 0000 -128 char c = -128; //80 1000 0000 0111 1111 1000 0000 -128 char d = -1; //ff 1111 1111 1111 1110 1000 0001 -1
-128可能大家會(huì)有疑問(wèn),1000 0000是負(fù)數(shù),按補(bǔ)碼反碼原碼的方式往回推減一為0111 1111,取反1000 0000為128,因?yàn)槭秦?fù)數(shù)所以就是-128.
所以signed char的最大值為127,最小值為-128.
unsigned是無(wú)符號(hào)的意思,就是沒有符號(hào)位。
unsigned char e = 256; //00 0000 0000 0 unsigned char f = -1; //ff 1111 1111 255 unsigned char g = 255; //ff 1111 1111 255
因?yàn)闆]有符號(hào)位,所以原反補(bǔ)碼都一樣,為什么-1的值為255呢,-1的原碼是0000 0001(沒符號(hào)位),反碼1111 1110,補(bǔ)碼
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C語(yǔ)言中宏和函數(shù)的9個(gè)區(qū)別詳解
C語(yǔ)言中的宏和函數(shù)是非常相似的,它們都可以完成類似的功能。本文為大家整理了C語(yǔ)言中宏和函數(shù)的9個(gè)區(qū)別,感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04
C++實(shí)現(xiàn)LeetCode(158.用Read4來(lái)讀取N個(gè)字符之二 - 多次調(diào)用)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(158.用Read4來(lái)讀取N個(gè)字符之二 - 多次調(diào)用),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
QT編寫窗口插件實(shí)現(xiàn)調(diào)用窗口的自適應(yīng)
這篇文章主要為大家詳細(xì)介紹了QT編寫窗口插件實(shí)現(xiàn)調(diào)用窗口的自適應(yīng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本
這篇文章主要介紹了如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本的方法,需要的朋友可以參考下2021-04-04
c++類成員函數(shù)如何做函數(shù)參數(shù)
這篇文章主要介紹了c++類成員函數(shù)如何做函數(shù)參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
C++數(shù)組放在main函數(shù)內(nèi)外的區(qū)別
大家好,本篇文章主要講的是C++數(shù)組放在main函數(shù)內(nèi)外的區(qū)別,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01

