OCT(八進制)程序員
最全ASCII碼對應表—與鍵盤按鍵對應值算法
ESC鍵 VK_ESCAPE (27)
回車鍵: VK_RETURN (13)
TAB鍵: VK_TAB (9)
Caps Lock鍵: VK_CAPITAL (20)
Shift鍵: VK_SHIFT (16)
Ctrl鍵: VK_CONTROL (17)
Alt鍵: VK_MENU (18)
空格鍵: VK_SPACE (/32)
退格鍵: VK_BACK (8)
左徽標鍵: VK_LWIN (91)
右徽標鍵: VK_LWIN (92)
鼠標右鍵快捷鍵:VK_APPS (93)
Insert鍵: VK_INSERT (45)
Home鍵: VK_HOME (36)
Page Up: VK_PRIOR (33)
PageDown: VK_NEXT (34)
End鍵: VK_END (35)
Delete鍵: VK_DELETE (46)
方向鍵(←): VK_LEFT (37)
方向鍵(↑): VK_UP (38)
方向鍵(→): VK_RIGHT (39)
方向鍵(↓): VK_DOWN (40)
F1鍵: VK_F1 (112)
F2鍵: VK_F2 (113)
F3鍵: VK_F3 (114)
F4鍵: VK_F4 (115)
F5鍵: VK_F5 (116)
F6鍵: VK_F6 (117)
F7鍵: VK_F7 (118)
F8鍵: VK_F8 (119)
F9鍵: VK_F9 (120)
F10鍵: VK_F10 (121)
F11鍵: VK_F11 (122)
F12鍵: VK_F12 (123)
Num Lock鍵: VK_NUMLOCK (144)
小鍵盤0: VK_NUMPAD0 (96)
小鍵盤1: VK_NUMPAD0 (97)
小鍵盤2: VK_NUMPAD0 (98)
小鍵盤3: VK_NUMPAD0 (99)
小鍵盤4: VK_NUMPAD0 (100)
小鍵盤5: VK_NUMPAD0 (101)
小鍵盤6: VK_NUMPAD0 (102)
小鍵盤7: VK_NUMPAD0 (103)
小鍵盤8: VK_NUMPAD0 (104)
小鍵盤9: VK_NUMPAD0 (105)
小鍵盤.: VK_DECIMAL (110)
小鍵盤*: VK_MULTIPLY (106)
小鍵盤+: VK_MULTIPLY (107)
小鍵盤-: VK_SUBTRACT (109)
小鍵盤/: VK_DIVIDE (111)
Pause Break鍵: VK_PAUSE (19)
Scroll Lock鍵: VK_SCROLL (145)編程
Bin二進學習 |
Dec十進ui |
Hex十六進編碼 |
縮寫/字符spa |
解釋orm |
00000000htm |
0blog |
00 |
NUL(null) |
空字符 |
00000001 |
1 |
01 |
SOH(start of handling) |
標題開始 |
00000010 |
2 |
02 |
STX (start of text) |
正文開始 |
00000011 |
3 |
03 |
ETX (end of text) |
正文結束 |
00000100 |
4 |
04 |
EOT (end of transm-ission) |
傳輸結束 |
00000101 |
5 |
05 |
ENQ (enquiry) |
請求 |
00000110 |
6 |
06 |
ACK (acknow-ledge) |
收到通知 |
00000111 |
7 |
07 |
BEL (bell) |
響鈴 |
00001000 |
8 |
08 |
BS (backsp-ace) |
退格 |
00001001 |
9 |
09 |
HT (horizon-tal tab) |
水平製表符 |
00001010 |
10 |
0A |
LF (NL line feed, new line) |
換行鍵 |
00001011 |
11 |
0B |
VT (vertical tab) |
垂直製表符 |
00001100 |
12 |
0C |
FF (NP form feed, new page) |
換頁鍵 |
00001101 |
13 |
0D |
CR (carriage return) |
回車鍵 |
00001110 |
14 |
0E |
SO (shift out) |
不用切換 |
00001111 |
15 |
0F |
SI (shift in) |
啓用切換 |
00010000 |
16 |
10 |
DLE (data link escape) |
數據鏈路轉義 |
00010001 |
17 |
11 |
DC1 (device control 1) |
設備控制1 |
00010010 |
18 |
12 |
DC2 (device control 2) |
設備控制2 |
00010011 |
19 |
13 |
DC3 (device control 3) |
設備控制3 |
00010100 |
20 |
14 |
DC4 (device control 4) |
設備控制4 |
00010101 |
21 |
15 |
NAK (negati-ve acknowl-edge) |
拒絕接收 |
00010110 |
22 |
16 |
SYN (synchr-onous idle) |
同步空閒 |
00010111 |
23 |
17 |
ETB (end of trans. block) |
傳輸塊結束 |
00011000 |
24 |
18 |
CAN (cancel) |
取消 |
00011001 |
25 |
19 |
EM (end of medium) |
介質中斷 |
00011010 |
26 |
1A |
SUB (substit-ute) |
替補 |
00011011 |
27 |
1B |
ESC (escape) |
溢出 |
00011100 |
28 |
1C |
FS (file separat-or) |
文件分割符 |
00011101 |
29 |
1D |
GS (group separat-or) |
分組符 |
00011110 |
30 |
1E |
RS (record separat-or) |
記錄分離符 |
00011111 |
31 |
1F |
US (unit separat-or) |
單元分隔符 |
00100000 |
32 |
20 |
|
空格 |
00100001 |
33 |
21 |
! |
|
00100010 |
34 |
22 |
" |
|
00100011 |
35 |
23 |
# |
|
00100100 |
36 |
24 |
$ |
|
00100101 |
37 |
25 |
% |
|
00100110 |
38 |
26 |
& |
|
00100111 |
39 |
27 |
' |
|
00101000 |
40 |
28 |
( |
|
00101001 |
41 |
29 |
) |
|
00101010 |
42 |
2A |
* |
|
00101011 |
43 |
2B |
+ |
|
00101100 |
44 |
2C |
, |
|
00101101 |
45 |
2D |
- |
|
00101110 |
46 |
2E |
. |
|
00101111 |
47 |
2F |
/ |
|
00110000 |
48 |
30 |
0 |
|
00110001 |
49 |
31 |
1 |
|
00110010 |
50 |
32 |
2 |
|
00110011 |
51 |
33 |
3 |
|
00110100 |
52 |
34 |
4 |
|
00110101 |
53 |
35 |
5 |
|
00110110 |
54 |
36 |
6 |
|
00110111 |
55 |
37 |
7 |
|
00111000 |
56 |
38 |
8 |
|
00111001 |
57 |
39 |
9 |
|
00111010 |
58 |
3A |
: |
|
00111011 |
59 |
3B |
; |
|
00111100 |
60 |
3C |
< |
|
00111101 |
61 |
3D |
= |
|
00111110 |
62 |
3E |
> |
|
00111111 |
63 |
3F |
? |
|
01000000 |
64 |
40 |
@ |
|
01000001 |
65 |
41 |
A |
|
01000010 |
66 |
42 |
B |
|
01000011 |
67 |
43 |
C |
|
01000100 |
68 |
44 |
D |
|
01000101 |
69 |
45 |
E |
|
01000110 |
70 |
46 |
F |
|
01000111 |
71 |
47 |
G |
|
01001000 |
72 |
48 |
H |
|
01001001 |
73 |
49 |
I |
|
01001010 |
74 |
4A |
J |
|
01001011 |
75 |
4B |
K |
|
01001100 |
76 |
4C |
L |
|
01001101 |
77 |
4D |
M |
|
01001110 |
78 |
4E |
N |
|
01001111 |
79 |
4F |
O |
|
01010000 |
80 |
50 |
P |
|
01010001 |
81 |
51 |
Q |
|
01010010 |
82 |
52 |
R |
|
01010011 |
83 |
53 |
S |
|
01010100 |
84 |
54 |
T |
|
01010101 |
85 |
55 |
U |
|
01010110 |
86 |
56 |
V |
|
01010111 |
87 |
57 |
W |
|
01011000 |
88 |
58 |
X |
|
01011001 |
89 |
59 |
Y |
|
01011010 |
90 |
5A |
Z |
|
01011011 |
91 |
5B |
[ |
|
01011100 |
92 |
5C |
\ |
|
01011101 |
93 |
5D |
] |
|
01011110 |
94 |
5E |
^ |
|
01011111 |
95 |
5F |
_ |
|
01100000 |
96 |
60 |
` |
|
01100001 |
97 |
61 |
a |
|
01100010 |
98 |
62 |
b |
|
01100011 |
99 |
63 |
c |
|
01100100 |
100 |
64 |
d |
|
01100101 |
101 |
65 |
e |
|
01100110 |
102 |
66 |
f |
|
01100111 |
103 |
67 |
g |
|
01101000 |
104 |
68 |
h |
|
01101001 |
105 |
69 |
i |
|
01101010 |
106 |
6A |
j |
|
01101011 |
107 |
6B |
k |
|
01101100 |
108 |
6C |
l |
|
01101101 |
109 |
6D |
m |
|
01101110 |
110 |
6E |
n |
|
01101111 |
111 |
6F |
o |
|
01110000 |
112 |
70 |
p |
|
01110001 |
113 |
71 |
q |
|
01110010 |
114 |
72 |
r |
|
01110011 |
115 |
73 |
s |
|
01110100 |
116 |
74 |
t |
|
01110101 |
117 |
75 |
u |
|
01110110 |
118 |
76 |
v |
|
01110111 |
119 |
77 |
w |
|
01111000 |
120 |
78 |
x |
|
01111001 |
121 |
79 |
y |
|
01111010 |
122 |
7A |
z |
|
01111011 |
123 |
7B |
{ |
|
01111100 |
124 |
7C |
| |
|
01111101 |
125 |
7D |
} |
|
01111110 |
126 |
7E |
~ |
|
01111111 |
127 |
7F |
DEL (delete) |
刪除 |
常見ASCII碼的大小規則:0~9<A~Z<a~z
1)數字比字母要小。如 「7」<「F」;
2)數字0比數字9要小,並按0到9順序遞增。如 「3」<「8」 ;
3)字母A比字母Z要小,並按A到Z順序遞增。如「A」<「Z」 ;
4)同個字母的大寫字母比小寫字母要小32。如「A」<「a」 。
記住幾個常見字母的ASCII碼大小: 「A」爲65;「a」爲97;「0」爲 48。
另外還有128-255的ASCII字符
字符集簡史
6000年前 象形文字
3000年前 字母表
1838年到1854年 Samuel F. B. Morse發明了電報,字母表中的每一個字符對應於一系列短的和長的脈衝
1821年到1824年 Louis Braille發明盲文,6位代碼,它把字符、經常使用字母組合、經常使用單字和標點進行編碼。
一個特殊的escape代碼表示後續的字符代碼應解釋爲大寫。一個特殊的shift代碼容許後續代碼被解釋爲數字。
1931年 CCITT標準化Telex代碼,包括Baudot #2的代碼,都是包括字符和數字的5位代碼。
1890年 早期計算機的字符碼是從Hollerith卡片,6位字符碼系統BCDIC(Binary-Coded Decimal Interchange Code:二進制編碼十進制交換編碼)
60年代 擴展爲8位EBCDIC,IBM大型主機的標準
1967年 美國信息交換標準碼(ASCII:American Standard Code for Information Interchange)
在字符長度是6位、7位仍是8位的問題上產生了很大的爭議。從可靠性的觀點來看不該使用替換字符,
所以ASCII不能是6位編碼,但因爲費用的緣由也排除了8位版本的方案(當時每位的儲存空間成本仍很昂貴)。
這樣,最終的字符碼就有26個小寫字母、26個大寫字母、10個數字、32個符號、33個句柄和一個空格,總共128個字符碼。
ASCII如今記錄在ANSI X3.4-1986字符集-用於信息交換的7位美國國家標準碼(7-Bit ASCII:7-Bit American National
Standard Code for Information Interchange),由美國國家標準協會(American National Standards Institute)發佈。
圖2-1中所示的ASCII字符碼與ANSI文件中的格式類似。
ASCII國際問題
ASCII是美國標準,因此它不能良好知足其它講英語國家的須要。例如英國的英鎊符號(£)在哪裏?
拉丁語字母表重音符號
使用斯拉夫字母表的希臘語、希伯來語、阿拉伯語和俄語。
漢字系統的中國象形漢字,日本和朝鮮。
1967年,國際標準化組織(ISO:International Standards Organization)推薦一個ASCII的變種,
代碼0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D「爲國家使用保留」,而代碼0x5E、0x60和0x7E標爲
「當國內要求的特殊字符須要8、9或10個空間位置時,可用於其它圖形符號」。這顯然不是一個最佳的國際解決方案,
由於這並不能保證一致性。但這卻顯示了人們如何想盡辦法爲不一樣的語言來編碼的。
擴展ASCII
1981年 IBM PC ROM256個字符的字符集,即IBM擴展字符集
1985年11 Windows字符集被稱做「ANSI字符集」,遵循了ANSI草案和ISO標準(ANSI/ISO 8859-1-1987,簡「Latin 1」。
ANSI字符集的最第一版本:
1987年4月代碼頁437,字符的映像代碼,出如今MS-DOS 3.3
雙字節字符集
雙字節字符集(DBCS:double-byte character set),解決中國、日本和韓國的象形文字符和ASCII的某種兼容性。
DBCS從256代碼開始,就像ASCII同樣。與任何行爲良好的代碼頁同樣,最初的128個代碼是ASCII。
然而,較高的128個代碼中的某些老是跟隨着第二個字節。
這兩個字節一塊兒(稱做首字節和跟隨字節)定義一個字符,一般是一個複雜的象形文字。
鍵盤經常使用ASCII碼
ESC鍵 VK_ESCAPE (27)
回車鍵: VK_RETURN (13)
TAB鍵: VK_TAB (9)
Caps Lock鍵: VK_CAPITAL (20)
Shift鍵: VK_SHIFT (16)
Ctrl鍵: VK_CONTROL (17)
Alt鍵: VK_MENU (18)
空格鍵: VK_SPACE (32)
退格鍵: VK_BACK (8)
左徽標鍵: VK_LWIN (91)
右徽標鍵: VK_LWIN (92)
鼠標右鍵快捷鍵:VK_APPS (93)
Insert鍵: VK_INSERT (45)
Home鍵: VK_HOME (36)
Page Up: VK_PRIOR (33)
PageDown: VK_NEXT (34)
End鍵: VK_END (35)
Delete鍵: VK_DELETE (46)
方向鍵(←): VK_LEFT (37)
方向鍵(↑): VK_UP (38)
方向鍵(→): VK_RIGHT (39)
方向鍵(↓): VK_DOWN (40)
F1鍵: VK_F1 (112)
F2鍵: VK_F2 (113)
F3鍵: VK_F3 (114)
F4鍵: VK_F4 (115)
F5鍵: VK_F5 (116)
F6鍵: VK_F6 (117)
F7鍵: VK_F7 (118)
F8鍵: VK_F8 (119)
F9鍵: VK_F9 (120)
F10鍵: VK_F10 (121)
F11鍵: VK_F11 (122)
F12鍵: VK_F12 (123)
Num Lock鍵: VK_NUMLOCK (144)
小鍵盤0: VK_NUMPAD0 (48)
小鍵盤1: VK_NUMPAD0 (49)
小鍵盤2: VK_NUMPAD0 (50)
小鍵盤3: VK_NUMPAD0 (51)
小鍵盤4: VK_NUMPAD0 (52)
小鍵盤5: VK_NUMPAD0 (53)
小鍵盤6: VK_NUMPAD0 (54)
小鍵盤7: VK_NUMPAD0 (55)
小鍵盤8: VK_NUMPAD0 (56)
小鍵盤9: VK_NUMPAD0 (57)
小鍵盤.: VK_DECIMAL (46)
小鍵盤*: VK_MULTIPLY (42)
小鍵盤+: VK_ADD (43)
小鍵盤-: VK_SUBTRACT (45)
小鍵盤/: VK_DIVIDE (47)
Pause Break鍵: VK_PAUSE (19)
Scroll Lock鍵: VK_SCROLL (145)
ASCII碼的算法:
A在ascii中定義爲01000001,也就是十進制65,有了這個標準後,當咱們輸入A時,計算機就能夠經過ascii碼知道輸入的字符的二進制編碼是01000001。而沒有這樣的標準,咱們就必須本身想辦法告訴計算機咱們輸入了一個A;沒有這樣的標準,咱們在別的機器上就須要從新編碼以告訴計算機咱們要輸入A。ascii碼指的不是十進制,是二進制。只是用十進制表示習慣一點罷了,好比在ascii碼中,A的二進制編碼爲01000001,若是用十進制表示是65,用十六進制表示就是41H。
在ascii碼錶中,只包括了一些字符、數字、標點符號的信息表示,這主要是由於計算機是美國發明的,在英文下面,咱們使用ascii表示就足夠了!可是在漢字輸入下面,用ascii碼就不能表示了,而漢字只是中國的通用表示,因此若是咱們要在計算機中輸入漢字,就必須有一個像ascii碼的標準來表示每個漢字,這就是中國的漢字國標碼,它定義了漢字在計算機中的一個表示標準。經過這個標準,但咱們輸入漢字的時候,咱們的輸入碼就轉換爲區位碼,經過惟一的區位碼獲得這個漢字的字形碼並顯示出來。固然漢字的區位碼在計算機中也是用二進制表示的!
二進制數轉換爲十進制數
二進制數第0位的權值是2的0次方,第1位的權值是2的1次方……
因此,設有一個二進制數:0110 0100,轉換爲10進製爲:
下面是豎式:
0110 0100 換算成 十進制
第0位 0 * 2^0 = 0
第1位 0 * 2^1 = 0
第2位 1 * 2^2 = 4
第3位 0 * 2^3 = 0
第4位 0 * 2^4 = 0
第5位 1 * 2^5 = 32
第6位 1 * 2^6 = 64
第7位 0 * 2^7 = 0
---------------------------
100
用橫式計算爲:
0 * 2^0 + 0 * 2^1 + 1 * 2^2 +0*2^3+ 0 * 2^4 + 1 * 2^5 + 1 * 2^6 + 0 * 2^7 = 100
0乘以多少都是0,因此咱們也能夠直接跳過值爲0的位:
1 * 2^2 + 1 * 2^5 + 1 * 2^6 = 100
6.2.2 八進制數轉換爲十進制數
八進制就是逢8進1。
八進制數採用 0~7這八數來表達一個數。
八進制數第0位的權值爲8的0次方,第1位權值爲8的1次方,第2位權值爲8的2次方……
因此,設有一個八進制數:1507,轉換爲十進制爲:
用豎式表示:
1507換算成十進制。
第0位 7 * 8^0 = 7
第1位 0 * 8^1 = 0
第2位 5 * 8^2 = 320
第3位 1 * 8^3 = 512
--------------------------
839
一樣,咱們也能夠用橫式直接計算:
7 * 8^0 + 0 * 8^1 + 5 * 8^2 + 1 * 8^3 = 839
結果是,八進制數 1507 轉換成十進制數爲 839
6.2.3 八進制數的表達方法
C,C++語言中,如何表達一個八進制數呢?若是這個數是 876,咱們能夠判定它不是八進制數,由於八進制數中不可能出7以上的阿拉伯數字。但若是這個數是123、是567,或12345670,那麼它是八進制數仍是10進制數,都有可能。
因此,C,C++規定,一個數若是要指明它採用八進制,必須在它前面加上一個0,如:123是十進制,但0123則表示採用八進制。這就是八進制數在C、C++中的表達方法。
因爲C和C++都沒有提供二進制數的表達方法,因此,這裏所學的八進制是咱們學習的,CtC++語言的數值表達的第二種進製法。
如今,對於一樣一個數,好比是100,咱們在代碼中能夠用日常的10進製表達,例如在變量初始化時:
int a = 100;
咱們也能夠這樣寫:
int a = 0144; //0144是八進制的100;一個10進制數如何轉成8進制,咱們後面會學到。
千萬記住,用八進制表達時,你不能少了最前的那個0。不然計算機會統統當成10進制。不過,有一個地方使用八進制數時,卻不能使用加0,那就是咱們前面學的用於表達字符的「轉義符」表達法。
6.2.4 八進制數在轉義符中的使用
咱們學過用一個轉義符'\'加上一個特殊字母來表示某個字符的方法,如:'\n'表示換行(line),而'\t'表示Tab字符,'\''則表示單引號。今天咱們又學習了一種使用轉義符的方法:轉義符'\'後面接一個八進制數,用於表示ASCII碼等於該值的字符。
好比,查一下第5章中的ASCII碼錶,咱們找到問號字符(?)的ASCII值是63,那麼咱們能夠把它轉換爲八進值:77,而後用 '\77'來表示'?'。因爲是八進制,因此本應寫成 '\077',但由於C,C++規定不容許使用斜槓加10進制數來表示字符,因此這裏的0能夠不寫。
事實上咱們不多在實際編程中非要用轉義符加八進制數來表示一個字符,因此,6.2.4小節的內容,你們僅僅瞭解就行。
6.2.5 十六進制數轉換成十進制數
2進制,用兩個阿拉伯數字:0、1;
8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;
10進制,用十個阿拉伯數字:0到9;
16進制,用十六個阿拉伯數字……等等,阿拉伯人或說是印度人,只發明瞭10個數字啊?
16進制就是逢16進1,但咱們只有0~9這十個數字,因此咱們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。
十六進制數的第0位的權值爲16的0次方,第1位的權值爲16的1次方,第2位的權值爲16的2次方……
因此,在第N(N從0開始)位上,若是是是數 X (X 大於等於0,而且X小於等於 15,即:F)表示的大小爲 X * 16的N次方。
假設有一個十六進數 2AF5, 那麼如何換算成10進制呢?
用豎式計算:
2AF5換算成10進制:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2 = 2560
第3位: 2 * 16^3 = 8192
---------------------------------
10997
直接計算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
(別忘了,在上面的計算中,A表示10,而F表示15)
如今能夠看出,全部進制換算成10進制,關鍵在於各自的權值不一樣。
假設有人問你,十進數 1234 爲何是 一千二百三十四?你盡能夠給他這麼一個算式:
1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0
6.2.6 十六進制數的表達方法
若是不使用特殊的書寫形式,16進制數也會和10進制相混。隨便一個數:9876,就看不出它是16進制或10進制。
C,C++規定,16進制數必須以 0x開頭。好比 0x1表示一個16進制數。而1則表示一個十進制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不區分大小寫。(注意:0x中的0是數字0,而不是字母O)
如下是一些用法示例:
int a = 0x100F;
int b = 0x70 + a;
至此,咱們學完了全部進制:10進制,8進制,16進制數的表達方式。最後一點很重要,C/C++中,10進制數有正負之分,好比12表示正12,而-12表示負12,;但8進制和16進制只能用達無符號的正整數,若是你在代碼中裏:-078,或者寫:-0xF2,C,C++並不把它當成一個負數。
6.2.7 十六進制數在轉義符中的使用
轉義符也能夠接一個16進制數來表示一個字符。如在6.2.4小節中說的 '?' 字符,能夠有如下表達方式:
'?' //直接輸入字符
'\77' //用八進制,此時能夠省略開頭的0
'\0x3F' //用十六進制
一樣,這一小節只用於瞭解。除了空字符用八進制數 '\0' 表示之外,咱們不多用後兩種方法表示一個字符。
6.3 十進制數轉換到2、8、十六進制數
6.3.1 10進制數轉換爲2進制數
給你一個十進制,好比:6,若是將它轉換成二進制數呢?
10進制數轉換成二進制數,這是一個連續除2的過程:
把要轉換的數,除以2,獲得商和餘數,
將商繼續除以2,直到商爲0。最後將全部餘數倒序排列,獲得數就是轉換結果。
聽起來有些糊塗?咱們結合例子來講明。好比要轉換6爲二進制數。
「把要轉換的數,除以2,獲得商和餘數」。
那麼:
要轉換的數是6, 6 ÷ 2,獲得商是3,餘數是0。 (不要告訴我你不會計算6÷3!)
「將商繼續除以2,直到商爲0……」
如今商是3,還不是0,因此繼續除以2。
那就: 3 ÷ 2, 獲得商是1,餘數是1。
「將商繼續除以2,直到商爲0……」
如今商是1,還不是0,因此繼續除以2。
那就: 1 ÷ 2, 獲得商是0,餘數是1 (拿筆紙算一下,1÷2是否是商0餘1!)
「將商繼續除以2,直到商爲0……最後將全部餘數倒序排列」
好極!如今商已是0。
咱們三次計算依次獲得餘數分別是:0、1、1,將全部餘數倒序排列,那就是:110了!
6轉換成二進制,結果是110。
把上面的一段改爲用表格來表示,則爲:
被除數 計算過程 商 餘數
6 6/2 3 0
3 3/2 1 1
1 1/2 0 1
(在計算機中,÷用 / 來表示)
若是是在考試時,咱們要畫這樣表仍是有點費時間,所更常見的換算過程是使用下圖的連除:
(圖:1)
請你們對照圖,表,及文字說明,而且自已拿筆計算一遍如何將6轉換爲二進制數。
說了半天,咱們的轉換結果對嗎?二進制數110是6嗎?你已經學會如何將二進制數轉換成10進制數了,因此請如今就計算一下110換成10進制是否就是6。
6.3.2 10進制數轉換爲8、16進制數
很是開心,10進制數轉換成8進制的方法,和轉換爲2進制的方法相似,唯一變化:除數由2變成8。
來看一個例子,如何將十進制數120轉換成八進制數。
用表格表示:
被除數 計算過程 商 餘數
120 120/8 15 0
15 15/8 1 7
1 1/8 0 1
120轉換爲8進制,結果爲:170。
很是很是開心,10進制數轉換成16進制的方法,和轉換爲2進制的方法相似,唯一變化:除數由2變成16。
一樣是120,轉換成16進制則爲:
被除數 計算過程 商 餘數
120 120/16 7 8
7 7/16 0 7
120轉換爲16進制,結果爲:78。
請拿筆紙,採用(圖:1)的形式,演算上面兩個表的過程。
6.4 2、十六進制數互相轉換
二進制和十六進制的互相轉換比較重要。不過這兩者的轉換卻不用計算,每一個C,C++程序員都能作到看見二進制數,直接就能轉換爲十六進制數,反之亦然。
咱們也同樣,只要學完這一小節,就能作到。
首先咱們來看一個二進制數:1111,它是多少呢?
你可能還要這樣計算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。
然而,因爲1111才4位,因此咱們必須直接記住它每一位的權值,而且是從高位往低位記,:8、4、2、1。即,最高位的權值爲23 = 8,而後依次是 22 = 4,21=2, 20 = 1。
記住8421,對於任意一個4位的二進制數,咱們均可以很快算出它對應的10進制值。
下面列出四位二進制數 xxxx 全部可能的值(中間略過部分)
僅4位的2進制數 快速計算方法 十進制值 十六進值
1111 = 8 + 4 + 2 + 1 = 15 F
1110 = 8 + 4 + 2 + 0 = 14 E
1101 = 8 + 4 + 0 + 1 = 13 D
1100 = 8 + 4 + 0 + 0 = 12 C
1011 = 8 + 4 + 0 + 1 = 11 B
1010 = 8 + 0 + 2 + 0 = 10 A
1001 = 8 + 0 + 0 + 1 = 10 9
....
0001 = 0 + 0 + 0 + 1 = 1 1
0000 = 0 + 0 + 0 + 0 = 0 0
二進制數要轉換爲十六進制,就是以4位一段,分別轉換爲十六進制。
如(上行爲二制數,下面爲對應的十六進制):
1111 1101 , 1010 0101 , 1001 1011
F D , A 5 , 9 B
反過來,當咱們看到 FD時,如何迅速將它轉換爲二進制數呢?
先轉換F:
看到F,咱們需知道它是15(可能你還不熟悉A~F這五個數),而後15如何用8421湊呢?應該是8 + 4 + 2 + 1,因此四位全爲1 :1111。
接着轉換 D:
看到D,知道它是13,13如何用8421湊呢?應該是:8 + 4 + 1,即:1101。
因此,FD轉換爲二進制數,爲: 1111 1101
因爲十六進制轉換成二進制至關直接,因此,咱們須要將一個十進制數轉換成2進制數時,也能夠先轉換成16進制,而後再轉換成2進制。
好比,十進制數 1234轉換成二制數,若是要一直除以2,直接獲得2進制數,須要計算較屢次數。因此咱們能夠先除以16,獲得16進制數:
被除數 計算過程 商 餘數
1234 1234/16 77 2
77 77/16 4 13 (D)
4 4/16 0 4
結果16進製爲: 0x4D2
而後咱們可直接寫出0x4D2的二進制形式: 0100 1101 0010。
其中對映關係爲:
0100 -- 4
1101 -- D
0010 -- 2
一樣,若是一個二進制數很長,咱們須要將它轉換成10進制數時,除了前面學過的方法是,咱們還能夠先將這個二進制轉換成16進制,而後再轉換爲10進制。
下面舉例一個int類型的二進制數:
01101101 11100101 10101111 00011011
咱們按四位一組轉換爲16進制: 6D E5 AF 1B