很早就開始接觸這些熟悉又陌生的關鍵字,但是,時不時還會有錯:
看定義:
正數的原碼、反碼、補碼形式一致,負數的反碼為原碼的數值位取反,補碼為反碼+1也即是原碼的數值位取反再+1,計算機中以補碼表示資料和運算
舉例:+34原碼=反碼=補碼:00100010
-34原碼=10100010,反碼=11011101,補碼=11011110
直接來看乙個題,**:
int main()
首先,-2147483648這個數為32位int所能表示的最小負整數,而如果原碼為 1000 0000 0000 0000 0000 0000 0000 0000(表示-0) ,其反碼應為數值位取反,符號位不變,即1111 1111 1111 1111 1111 1111 1111 1111,補碼為反碼+1 即為0 000 0000 0000 0000 0000 0000 0000 0000(最高位溢位,捨去),而+0 的原碼、反碼、補碼均為 0 000 0000 0000 0000 0000 0000 0000 0000,如果用 1000 0000 0000 0000 0000 0000 0000 0000作為 -2147483648的原碼,則會導致 -2147483648和0的補碼表示一樣。
因此,計算機中規定用 1000 0000 0000 0000 0000 0000 0000 0000來作為 -2147483648的補碼,以確保-2147483648~2147483647都有唯一的補碼表示;
所以:1》~i:i的補碼為1000 0000 0000 0000 0000 0000 0000 0000,取反0111 1111 1111 1111 1111 1111 1111 1111,此為補碼,符號位為0,表示正數,正數原碼補碼一致,因而該數即表示231-1,即2147483647。
2》-i:要對乙個數值執行單目運算子 - 表示的是對該數取反然後再+1,也即是我們常說的求補運算,注意這裡取反+1與原碼求補碼的區別!也就是求補運算與求補碼是不一樣的!題目中i的補碼為 1000 0000 0000 0000 0000 0000 0000 0000,取反+1,仍為 1000 0000 0000 0000 0000 0000 0000 0000,即 -2147483648
3》1-i 我們已經求出-i的補碼為1000 0000 0000 0000 0000 0000 0000 0000 加上1的補碼即為 1000 0000 0000 0000 0000 0000 0000 0001
該補碼表示的原碼為1 111 1111 1111 1111 1111 1111 1111 1111,即為- 2147483647。
4》-1-i -1的補碼為1 111 1111 1111 1111 1111 1111 1111 1111,加上-i補碼 1000 0000 0000 0000 0000 0000 0000 0000,
得 0111 1111 1111 1111 1111 1111 1111 1111,即 2147483647
弄懂以上內容,基本就差不多了!
賜教!
補碼原碼反碼簡單理解
看到一句i2s的data是以補碼形式來表現資料。再次查閱得出以下只管結論 1,首先直觀舉例機器裡面是如何存放有符號數的 1在機器裡面表示為 0000 0001h 0在機器裡面表示為 0000 0000h 1在機器裡面表示為1111 1111h 2在機器裡面表示為1111 1110h 其實機器並不知道...
原碼,反碼,補碼,個人理解
原碼 二進位制定點表示法,即最高位為符號位,0 表示正數,1 表示負數,其餘的位表示數值的大小 正數的最高位為0 負數的最高位為1 例子 符號位 數值位 7 0 0000111 7 1 0000111 反碼 正數的反碼與原碼相同,沒有任何改變 負數的反碼 與原碼的符號位不變,其他值取反,也就是0變1...
原碼,反碼與補碼理解
1.寫作目的 平時學習總結的學習筆記,方便自己理解加深印象。同時希望可以幫到正在學習這方面知識的同學,可以相互學習。新手上路請多關照,如果問題還請不吝賜教。2.前置知識 位元組 位 二進位制數 計算機儲存資料使用位元組進行儲存,機器有32位,64位為乙個最小儲存單元,1個位元組為8位,那麼32位機器...