負(fù)數(shù)與二進(jìn)制換轉(zhuǎn)方法
1、十進(jìn)制負(fù)數(shù)轉(zhuǎn)二進(jìn)制
假設(shè)有一個(gè) int 類型的數(shù),值為5,那么,我們知道它在計(jì)算機(jī)中表示為: (因?yàn)閖ava中int 是4個(gè)字節(jié),所以高位需要補(bǔ)0,占?jí)?2位)
00000000 00000000 00000000 00000101
現(xiàn)在想知道,-5在計(jì)算機(jī)中如何表示?
在計(jì)算機(jī)中,負(fù)數(shù)以原碼的補(bǔ)碼形式表達(dá)。
什么叫補(bǔ)碼呢?這得從原碼,反碼說起。
原碼:一個(gè)正數(shù),按照絕對值大小轉(zhuǎn)換成的二進(jìn)制數(shù);一個(gè)負(fù)數(shù)按照絕對值大小轉(zhuǎn)換成的二進(jìn)制數(shù),然后最高位補(bǔ)1,稱為原碼。
比如 00000000 00000000 00000000 00000101 是 5的 原碼;10000000 00000000 00000000 00000101 是 -5的 原碼。
反碼:正數(shù)的反碼與原碼相同,負(fù)數(shù)的反碼為對該數(shù)的原碼除符號(hào)位外各位取反。
取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)
比如:正數(shù)00000000 00000000 00000000 00000101 的反碼還是 00000000 00000000 00000000 00000101 ;
負(fù)數(shù)10000000 00000000 00000000 00000101每一位取反(除符號(hào)位),得11111111 11111111 11111111 11111010。
稱:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互為反碼。
補(bǔ)碼:正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼為對該數(shù)的原碼除符號(hào)位外各位取反,然后在最后一位加1.
比如:10000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。
那么,補(bǔ)碼為:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在計(jì)算機(jī)中表達(dá)為:11111111 11111111 11111111 11111011。轉(zhuǎn)換為十六進(jìn)制:0xFFFFFFFB。
再舉一例,我們來看整數(shù)-1在計(jì)算機(jī)中如何表示。
假設(shè)這也是一個(gè)int類型,那么:
1、先取-1的原碼:10000000 00000000 00000000 00000001
2、得反碼: 11111111 11111111 11111111 11111110(除符號(hào)位按位取反)
3、得補(bǔ)碼: 11111111 11111111 11111111 11111111
可見,-1在計(jì)算機(jī)里用二進(jìn)制表達(dá)就是全1。16進(jìn)制為:0xFFFFFF
主要知識(shí)點(diǎn):
①正數(shù)的反碼和補(bǔ)碼都與原碼相同。
②而負(fù)數(shù)的反碼為對該數(shù)的原碼除符號(hào)位外各位取反。
③負(fù)數(shù)的補(bǔ)碼為對該數(shù)的原碼除符號(hào)位外各位取反,然后在最后一位加1
下面是書上原文:
①原碼表示法規(guī)定:用符號(hào)位和數(shù)值表示帶符號(hào)數(shù),正數(shù)的符號(hào)位用“0”表示,負(fù)數(shù)的符號(hào)位用“1”表示,數(shù)值部分用二進(jìn)制形式表示。
②反碼表示法規(guī)定:正數(shù)的反碼與原碼相同,負(fù)數(shù)的反碼為對該數(shù)的原碼除符號(hào)位外各位取反。
③補(bǔ)碼表示法規(guī)定:正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼為對該數(shù)的原碼除符號(hào)位外各位取反,然后在最后一位加1.
④正零和負(fù)零的補(bǔ)碼相同,[+0]補(bǔ)=[-0]補(bǔ)=0000 0000B。
2、符號(hào)位為1的二進(jìn)制轉(zhuǎn)十進(jìn)制負(fù)數(shù)
相信大家已經(jīng)知道如何個(gè)轉(zhuǎn)法了,不過在此還是說明一下。
①除去符號(hào)位減1;
②除去符號(hào)位,按位取反;結(jié)果就是負(fù)數(shù)的源碼;
③源碼轉(zhuǎn)成相應(yīng)的十進(jìn)制。
PS:對于十進(jìn)制負(fù)數(shù)和二進(jìn)制的換轉(zhuǎn)到此結(jié)束,如果有錯(cuò)誤或有更好的方法,歡迎討論。
相關(guān)文章
Visual Studio和Visual Studio Code之間有什么區(qū)別
本文給大家介紹的是Visual Studio和Visual Studio Code之間有什么區(qū)別,希望對大家的學(xué)習(xí)能夠有所幫助2020-02-02解決使用commit提交大文件無法推送到遠(yuǎn)程庫問題及git rebase使用詳解
這篇文章主要介紹了解決使用commit提交大文件無法推送到遠(yuǎn)程庫問題及git rebase使用詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07從console.log說起(console.log詳細(xì)介紹)
console.log,作為一個(gè)前端開發(fā)者,可能每天都會(huì)用它來分析調(diào)試,但這個(gè)簡單函數(shù)背后不簡單那一面,這篇文章就為大家介紹一下2017-09-09VSCode如何遠(yuǎn)程連接Linux教程(密鑰的使用)
本文主要介紹了VSCode如何遠(yuǎn)程連接Linux教程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12git 配置多個(gè)SSH-Key實(shí)現(xiàn)示例
這篇文章主要為大家介紹了git 配置多個(gè)SSH-Key實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07git 報(bào)錯(cuò):OpenSSL SSL_read: Connection was&
這篇文章主要介紹了git 報(bào)錯(cuò):OpenSSL SSL_read: Connection was reset, errno 10054 解決方法,涉及git配置信息及緩存相關(guān)操作技巧,需要的朋友可以參考下2023-04-04