進制轉換,原碼反碼補碼
========================================
進制和補碼
1.二進制
2.十六進制
3.八進制
4.數據在內存中的存儲方式
1)正數和負數
2)原碼,反碼,補碼
========================================
n進制的兩個特點:
1、有基本數字n個
2、滿n進一
十進制
1、十進制產生的原因:
十個手指;
2、十進制的規律
基本數字:0,1,2,3,4,5,6,7,8,9 (十個基本數字)
進位: 9+1=10
二進制
1、二進制的表示方式:
0 1
2、導出二進制的規律
基本數字:0,1(兩個基本數字)
進位: 1+1= 0b10
3、爲什麼需要二進制:
1)供計算機內部使用(計算機裏面以二進制存儲數據)
2)爲什麼計算機內部要使用二進制
電路簡單,由邏輯電路組成,開1,關0
邏輯,真,假;
4、十進制和二進制之間的轉換
1)十進制轉換爲二進制
十進制轉化爲二進制
1、除以2取商繼續除以2,一直除到商爲0爲止
2、最後將所有的餘數從下往上逆序排
計算:11的二進制
11的二進制:
11➗2=5…..1 0位
5 ÷ 2=2……1 1位
2 ➗2=1….0 2位
1➗2 =0.。。1 3位
11 的二進制爲:0b1011
計算15的二進制
15➗2=7.。。1
7➗2=3.。。。1
3➗2=1.。。。1
1➗2=0.。。。1
15 的二進制:ob1111
求 65的二進制?
1000001
65➗2=32.。。1 0位
32➗2=16.。。0 1位
16➗2=8.。。。0 2位
8➗2=4.。。。0 3位
4➗2=2.。。。。0 4位
2➗2=1.。。。0 5位
1➗2=0.。。。1 6位
ob1000001
(2)求1 ,2 ,4, 8, 16, 32, 64, 128的二進制並找出其規律
8開關
1:0000 0001 2^0
2:0000 0010
4:0000 0100
8:0000 1000
16:0001 0000
32:0010 0000
64:0100 0000
128:1000 0000
7654 3210
二進制轉化爲十進制:
十進制:1215 = 5*10^0+1*10^1+2*10^2+1*10^3=1215
3210
示例:0b101011
0b101011 = 1*2^0+1*2^1+0+1*2^3+0+1*2^5=
543210
101011 的十進制爲:543210
練習:
1)0000 1010=1*2^1+1*2^3=2+8=10
=2+8=10
2)1001 1111 = 1+2+4+8+16+128=31+128=159
3)0001 0011 =1+2+16=19
4)0100 0100 =4+64=68
5)1111 1111 = 255
1111 1111
+ 1
———————
1 0000 0000
0 1000 0000 =128
256-1=255
=================================================
十六進制
1、十六進制的表示方式和範圍
0x1234ff
十六進制數的規則
基本數字: 0,1,2,3,4,5,6,7,8,9, a,b,c,d,e,f (十六個基本數字)
0~9:
a,b,c,d,e,f : 10, 11 , 12 ,13, 14,15
進位:1+f=0x10
0b111111111000000111
0xffa
2.爲什麼需要十六進制
1)計算機以二進制存儲數據,但二進制數太長了,
面對這麼長的數進行思考或操作,
沒有人會喜歡,用16進制或8進制可以解決這個問題。
2)不過,爲什麼偏偏是16或8進制,而不其它的,諸如9或20進制呢?
因爲2、8、16,分別是2的1次方,3次方,4次方。這一點使得三種進制之間可以
非常直接地互相轉換。8進制或16進制縮短了二進制數,但保持了二進制數的表達特點。
16, 2^4=2*2*2*2=16
8 ,2^3=2*2*2=8
3、十六進制與十進制的轉換
1)十進制如何轉化爲十六進制?
十進100 -> 十六進制
1、除以16取商繼續除以16,一直除到商爲0爲止
2、最後將所有的餘數從下往上逆序排列,前面加上前綴 0x
則100的十六進制爲:
100➗16=6.。。。4 0位
6 ➗ 16=0.。。。6 1位
100十六進制:0x64
練習:
1、將下列十進制數轉換爲十六進制
1)16 =0x10 2)32 = 0x20
3)64 =0x40 4)88 =0x58
2)如何將十六進制轉換成十進制
例如:
0xabf = 15*16^0+11*16^1+10*16^2=
210
2、將下列十六進制數轉換成十進制數
1)0xf = 15*16^0=15*1=15
2)0x10 = 1*16^1+0=16
3)0x123 = 1*16^2+2*16^1+3*16^0= 256+32+3=291
==========================================
10進制轉換n進制:
除以n,取商繼續除以n,一直除到商爲0爲止
將餘數從下往上讀;
n進制轉換10進制:
按位展開:
x*n^位數+。。。+。。
===========================================
4、十六進制與二進制之間的轉換
1)十六進制數轉化爲二進制數
每位十六進制數轉換爲4個二進制數
16=2^4
1位—>4位
0xf==15
0b1111==15
0x3 a
10==1010
3==0011
11 1010
0x3a 二進制爲:0b111010
2)二進制數轉化爲十六進制數
從低位到高位,每4位一取,不足高位補0
4位—>1位
例如:
0011 1010
111010 的十六進制數:0x3a
0101 1110
5 14==e
1011110 的十六進制:0x5e
3、將下列二進制數轉換成十六進制數
1)1010 =0xa
2)0001 1111 =0x1f
1 f
3)0001 0011 =0x13
1 3
4)0100 0000=0x40
4 0
5)1000 0001 1111=0x81f
8 1 f
4、將下列十六進制數轉換爲二進制
1位—>4位
1)0x4 5 = 1000101
0100 0101
2)0x1 5 9 = 101011001
0001 0101 1001
3)0x5 6 0=10101100000
0101 0110 0000
4)0x2 4 6 8 = 10010001101000
0010 0100 0110 1000
==================================================
八進制(非重點,不常用)
1、八進制的表示方式和規則
1)0
010 != 10
== 8
2)基本數字:0,1,2,3,4,5,6,7
進位: 1+7=010
2、二進制與八進制之間的轉換
1)二進制轉化爲八進制
從低位到高位3位一取,不足補0
8=2^3
例如:
0b101 010
5 2
0b101010的八進制:052
2)八進制轉化爲二進制
每1位八進制轉換成3位二進制
01 7
001111
017的二進制:0b1111
==================================================
5、位圖概念
比特位 bit
0,1
關 開
1bit 1開關
8bit = 1Byte =1B 1字節
1KByte=1024Byte=2^10Byte
1MByte= 1MB=1024KByte
1GByte=1GB=1024MByte
0000 0000
1111 1111
1GB=1024MB=1024*1024KB=1024*1024*1024B
10 普通的整數
一個普通正數 至少需要32位
10
1010
32bit:
00000000 00000000 00000000 00001010
最高位 最低位 0位
-10
1010
最高位是符號位:正數:0,負數:1
10000000 00000000 00000000 00001010
1.一個普通的整數需要至少32個位表示
2.左邊是高位,右邊是低位
3.右邊第1個二進制位稱爲第0位
計算機中的有符號數表示:
4.最高位稱爲符號位,0表示正數,1表示負數
計算機存儲數據:
編碼方式3種: 原碼,反碼,補碼
正數:(三碼相同) 原碼=反碼=補碼
1
0000 0001 (原碼)
0000 0001 (反碼)
0000 0001 (補碼)
負數:
-1
原碼:最高位置1 : 1000 0001
反碼:最高位保持不變,其餘取反:1111 1110
補碼:在反碼基礎上加1: 1111 1111
計算機存儲都是有符號數
1
-1
計算機:沒有減法器,有加法器
1-1=1+(-1)=
原碼:
1 - 1 = 1 + (-1)= 0
1: 0000 0001
-1: 1000 0001
0000 0001
+ 1000 0001
———————————
1000 0010
=-2
反碼:
1 - 1=1+(-1)=0
1: 0000 0001
-1: 1111 1110
0000 0001
+ 1111 1110
—————————————
1111 1111
== 1000 0000
== (-0)
0000 0000
0和-0
補碼:
1 : 0000 0001
-1: 1111 1111
0000 0001
+ 1111 1111
————————————
10000 0000
0000 0000 ==0
帶符號位進行運算,補碼
計算機保存數據 :補碼
數據在內存中的表示方式.
計算機的編碼方式有三種:原碼、反碼和補碼
1.補碼
1)在計算機系統中,數值統一使用補碼來表示和存儲
2.爲什麼要使用補碼
1)計算機只有加法器,將符號位一起參與運算
2)兩個用補碼錶示的數相加時,如果最高位(符
號位)有進位,則進位被捨棄
3.計算機內部如何表示一個數
1)正數
1>正數的三碼相同
2)負數
1>負數的原碼
2>通過原碼計算
3>正數負數在內存中真正的表示方式--補碼
4>補碼計算方式
負數:
1)符號位不變
2)剩餘所有二進制數取反----反碼
3)對反碼進行+1操作
補碼 ---- > 原碼
1:—>0000 0001
-1 —>原碼
1111 1111
1000 0001
6>補碼轉換爲原碼 (負數)
1)符號位不變
2)剩餘所有二進制數取反
3)+1操作
練習:
1.計算以下數的二進制補碼
1)-12, 2)-10, 3)-15, 4)-1
32bit
-12: 1100
10000000 00000000 00000000 00001100 -12原碼
11111111 11111111 11111111 11110011 -12反碼
11111111 11111111 11111111 11110100 (-12補碼)
-10 : 1010
10000000 00000000 00000000 00001010 -10原碼
11111111 11111111 11111111 11110101 -10 反碼
11111111 11111111 11111111 11110110 (-10補碼)
-15: 1111
10000000 00000000 00000000 00001111 -15原碼
11111111 11111111 11111111 11110000 -15反碼
11111111 11111111 11111111 11110001 -15補碼
-1:
1000000 00000000 00000000 00000001 :-1原碼
11111111 11111111 11111111 11111110 :-1反碼
11111111 11111111 11111111 11111111 :-1補碼
2.通過二進制計算下列數的結果
-5+6 = 1, -10+6=-4, 20+(-1)
32bit
-5:101
10000000 00000000 00000000 00000101 原碼
11111111 11111111 11111111 11111010 反碼
11111111 11111111 11111111 11111011 補碼
11111111 11111111 11111111 11111011 (-5補碼)
+ 00000000 00000000 00000000 00000110 (6補碼)
——————————————————————————————————
1 00000000 00000000 00000000 00000001
== 00000000 00000000 00000000 00000001 ==1
-10+6 =-4
1010
10000000 00000000 00000000 00001010 原碼
11111111 11111111 11111111 11110101 反碼
11111111 11111111 11111111 11110110 補碼
11111111 11111111 11111111 11110110 (-10補碼)
+ 00000000 00000000 00000000 00000110 (6補碼)
———————————————————————————————
1111111 11111111 11111111 11111100 (補碼)
補碼—》原碼
最高位保持不變,其餘取反,再+1:
10000000 00000000 00000000 00000100 (-4)
20+(-1)= 19
0000000 0000000 00000000 00010011 ==19