黑馬程式設計師---學習筆記3:進位制

七分熱度_HD發表於2015-08-19

——Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ——-


進位制:是一種計數的方式,是數字的表示形式。
常見的進位制:二進位制,八進位制,十進位制,十六進位制

特殊進製表示形式:
二進位制:0b0101101(以0b或0B開頭)
八進位制:045(以0開頭)
十六進位制:以0x或0X開頭,0x2df。

各種進位制的輸出方式:
八進位制:%o
十進位制:%d
十六進位制:%x

定義數值:
二進位制:0b 0000 0000 0000 0000 0000 0000 0000 1101 (13,計算機中int型佔32位,定義的時候不加空格)
八進位制:015(13)
十六進位制:0xd(13)

進位制轉換:
進位制轉換的要素:1)數位 2)基數 3)位權
數位:指數碼在數中所處的位置
基數:指進位制數
位權:是值該數值位表示的固定值,可以計算出來(比如第三位是1,則二進位制1*2^(3-1)=4,十進位制1*10^(3-1)=100)
數碼*基數^(數位-1)=這個位表示的數

二進位制和十進位制互轉:
10----->2
整數部分除二取餘法,小數部分,乘二取整法,高位補0,將得到的餘數倒敘就可以得到二進位制了
二進位制和十六進位制互轉:
2----->16
整數部分從右向左,每4位合併以為,組成16進位制數,小數部分,從左往右,4合1
16---->2
1位拆4位,整數部分從右到左,小數部分從左至右

機器數和真值:
機器數:一個數在計算機中的二進位制表示形式,都是帶符號位的,最高位0表示整數,最高位1表示負數
真值:二進位制(除去符號位)轉換成的十進位制後的數值,因為機器數的第一位是符號位所以,機器數的形式值就不是真正的值

原碼,反碼,補碼:
資料在計算機的內部是以補碼的形式儲存的

對於正數:原碼=補碼=反碼,是這個數的二進位制表示
原碼:數字的二進位制表示形式,第一位是符號位
反碼:除符號位外,其他位取反
補碼:負數的補碼是在原碼的基礎上,除符號位不變,其他各位取反,末位+1(就是反碼+1)

小結:
對於引入補碼的理解:計算機中減法運算要轉換成加法來求值,因為減法的邏輯相對加法過於複雜。
因此引入了補碼的概念,來用加法完成減法運算。(這裡補碼只針對負數)
這個思想最好理解的方向是從圓的角度來想,90度-30度=60度,在一個圓盤裡,它所指的方向和90度+(360度-30度)一致。
因為圓的角度在增加過程中,它的指向是迴圈的,這與確定位數的二進位制數表示的數值情況一致,數從0000 0000到1111 1111再到0000 0000,在這種基礎下,補角的思想轉化成了補碼。

補碼,我理解為“補數”,即在同樣數位下的,兩個數數值位相加為2^n的數。

拿8位數為例,1000 0001(原碼) 表示-1,補碼為1111 1111,當我們除去符號位時可以看出,這兩個數分別為000 0001和111 1111,數值位相對於128=2^8互補。
有了這樣的基礎,在做減法運算時,減法轉換成了對數值互補數的加法(不管符號位)。比如000 0101(5)-000 0001(1)=
000 0100(4)等價於000 0101(5)+111 1111(127)=1000 0100(132)從後7位看000 0100(4)等於4,這樣,減法成功轉換成加法。



相關文章