1. 程式人生 > >常見的進制轉換與有符號數據表示法

常見的進制轉換與有符號數據表示法

hit bubuko 反碼 -- com 十進制 ron 正數 組成

註:本內容參考與傳智播客的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

常見的進制轉換與有符號數據表示法