常見的進制轉換與有符號數據表示法
註:本內容參考與傳智播客的Java內容的講解,當然我整理了一下,做個記錄~~~ 其中我認為很有價值的是有符號數據表示法,真正的去深入了解計算機,雖然我是一個渣渣~~~
所謂進制就是指:就是位進制,是人們規定的一種進位方法。對於任何一種進制 --X進制,就表示某一位置上的數運算時是逢X進一位。二進制就是逢二進一,八進制就是逢八進一,十進制就是逢十進一,十六進制就是逢十六進一。
一、常見的進制轉換
1、在Java中針對整數常量提供了四種表現形式
(1)二進制 由0,1組成。以0b開頭。
(2)八進制 由0,1,...7組成。以0開頭。
(3)十進制 由0,1,...9組成。整數默認是十進制。
(4)十六進制 由0,1,...9,a,b,c,d,e,f(大小寫均可)組成。以0x開頭。
2、進制轉換
(1)其他進制到十進制(系數*基數^權)
系數:就是每一個位上的數值
基數:x進制的基數就是x
權:對每一個位上的數據,從右,並且從0開始編號,對應的編號就是該數據的權。
例子:
0b10101 (這個數是二進制的一個數,因為是以0b開頭的)
=1*2^4 + 1*2^2 + 1*2^0
=16 + 4 + 1
=21
0123(這個數是八進制的一個數,因為是以0開頭的)
=1*8^2 + 2*8^1 + 3*8^0
=64 + 16 + 3
=83
0x3c(這個數是十六進制的一個數,因為是以0x開頭的)
=3*16^1 + c*16^0
=48 + 12
=60
(2)十進制到其他進制的轉換
除基取余,直到商為0,余數反轉。
例子:
52分別得到二進制,十進制,十六進制
得到二進制:
52 / 2 = 260
26 / 2 = 130
13 / 2 = 6 1
6 / 2 = 3 0
3 / 2 = 1 1
1 / 2 = 0 1
0b110100
得到八進制:
52 / 8 = 64
6 / 8 = 0 6
064
得到十六進制:
52 / 16 = 3 4
3 / 16 = 0 3
0x34
3、進制轉換的快速轉換法
(1)十進制和二進制間的轉換
8421碼。
(2)二進制到八進制,十六進制的轉換
二、有符號數據表示法
在計算機內,有符號數據有三種表示法:原碼、反碼和補碼。所有數據的運算都是采用補碼進行的。
原碼:就是二進制定點表示法。即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
反碼:正數的反碼與其原碼相同,負數的反碼是對其原碼逐位取反,符號位除外。
補碼:正數的補碼與其原碼相同,負數的補碼是在其反碼的末位加1。
例子:
1)已知某數X的原碼為10110100B,試求X的補碼和反碼。
符號位數值位
原碼:10110100
反碼:11001011
補碼:11001100
2)已知某數X的補碼11101110B,試求其原碼。
符號位數值位
補碼:11101110
反碼:11101101
原碼:10010010
常見的進制轉換與有符號數據表示法