一.計算機中爲何要用二進制java
1.計算機中一個數是用電子器件的「開」和「關」來表示的,即二進制的「1」和「0」。算法
2.二進制運算法則簡單。如加法:0+0=0,0+1=1+0=1,1+1=10 (3個公式)而十進制加法法則需記55個公式。數據結構
3.二進制是計算機中採用的基本數制;而八進制和十六進制用做二進制的壓縮形式;十進制是理解其餘數制的基礎。學習
如:串行通信接口COM1口的輸入輸出端口地址用 03F8-03FF(十六進制數)表示 。加密
二.四種進位計數制的基數、位權和權值spa
進位計數制是一種數的表示方法,它按進位的方式來計數,簡稱爲進位制。設計
1. 十進制的基數是10,10個數字符號,0、一、二、三、四、五、六、七、八、9code
進位規則:逢10進1htm
例:(518)10 =5*102+1*101+8*100對象
102 101 100 是十進制的位權
100 10 0 權值
2.二進制的基數是2, 2個數字符號, 0、1
進位規則:逢2進1
例:(1101)2 =1*23+1*22+0*21+1*20 =(13)10
23 22 21 20 是二進制的位權
8 4 2 1 權值
3.十六進制基數是16,16個數字符號, 0、一、二、三、四、五、六、
七、八、九、A、B、C、D、E、F
進位規則:逢16進1
例:(2AF)16 =2*162+A*161+F*160 =(687)10
162 161 160 是十六進制的位權
256 16 1 權值
四、八進制基數是8,8個數字符號,0、一、二、三、四、五、六、7
進位規格:逢8進1
例:(112)8 =1*82+1*81+2*80 =(74)10
82 81 80 是八進制的位權
64 8 2 權值
四種進制的縮寫:
十進制:518D、 二進制:1101B、十六進制:2AFH 八進制:以0開頭
二進制 |
十進制 |
十六進制 |
八進制 |
二進制 |
十進制 |
十六進制 |
八進制 |
0 |
0 |
0 |
0 |
1001 |
9 |
9 |
11 |
1 |
1 |
1 |
1 |
1010 |
10 |
A |
12 |
10 |
2 |
2 |
2 |
1011 |
11 |
B |
13 |
11 |
3 |
3 |
3 |
1100 |
12 |
C |
14 |
100 |
4 |
4 |
4 |
1101 |
13 |
D |
15 |
101 |
5 |
5 |
5 |
1110 |
14 |
E |
16 |
110 |
6 |
6 |
6 |
1111 |
15 |
F |
17 |
111 |
7 |
7 |
7 |
10000 |
16 |
10 |
20 |
1000 |
8 |
8 |
10 |
1001 |
/ |
/ |
/ |
三.二進制數的算術運算
1. 二進制數的算術運算
(1). 二進制數的加法
法則:0+0 =0
0+1 = 1+0 = 1
1+1 = 10 (進位)
例:(1011)2 +(1110)2 = (11001)2
1011
+ 1110
11001
(2).二進制數的減法
法則: 0—0 = 0
1—0 = 1
0—1 = 1(有借位)
1—1 = 0
例:(1101)2 —(0110)2 =(0111)2
(3).二進制數的乘法
法則:0*0=0
0*1=1*0=0
1*1=1
例:(1100)2*(1010)2 =(1111000)2
(4).二進制數的除法
法則:0 / 0 = 0
1 / 1 = 1
例:(1111000)2 /(1010)2 = (1100)2
2. 二進制數的邏輯運算
邏輯變量之間的運算稱爲邏輯運算。能夠表示爲「真」與「假」、「是」與「否」、「有」與「無」。
(1)「或」運算(邏輯加法),符號「V」或「+」
0 V 0 = 0
0 V 1 = 1 V 0 = 1
1 V 1 = 1
兩個變量只要有一個爲1,其邏輯加的結果就爲1;二者都爲1,則邏輯加固然爲1。
或邏輯關係至關於「電燈」的並聯關係。
(2)「與」運算(邏輯乘法),符號「∧」或「Х」「· 」
0 ∧ 0 = 0
0 ∧ 1 = 1 ∧ 0 = 0
1 ∧ 1 = 1
只有參與運算的邏輯變量都同時爲1時,邏輯乘積纔等於1。
與邏輯關係至關於「用電器」的串聯關係。
(3)「非」運算(邏輯否認)
非0等於1
非1等於0
(4)異或邏輯關係 符號「⊕」
0⊕0 = 0
0⊕1 = 1
1⊕0 = 1
1⊕1 = 0
只要兩個邏輯變量相同,則「異或」運算的結果就位 0 ;當兩個邏輯變量不一樣時,則「異或」的結果才爲1。
所以,以上邏輯運算沒有算術運算中的進位或借位問題。
邏輯運算在計算機內部的電路設計、軟件以及數據處理過程當中常用。
四. 不一樣進制之間的數據轉換
1. 十進制數與二進制數之間的轉換
(1). 2 1 0
將二進制數轉換成十進制數:按位權展開求和。
整數:(11001100)2 =(204)10
小數:(1000001.01)2 =(65.25) 10
(2). 10 2
整數:「除二取餘」「下高上底」
例:(238)10=(11101110)2
簡便算法:將十進制數分解成若干個2的整次冪之和,
例:(238)10 =128+64+32+8+4+2=27+26+25+23+22+21
=(11101110)2
小數「乘二取整」 「上高下底」
例:(0.75)10 =(0.11)2
3. 二進制數與十六進制數之間的轉換
由於24 = 161,28 = 162,即4位二進制數可表示一位十六進制數。
(1) 2 16
每4位分1組,不足4位前補0
例:(10111010011010)2 =(2E9A)16
(2) 16 2
例:(2E9A)16 =(10111010011010)2
3.十進制數與十六進制數之間的轉換
(1) 10 16
「除十六取餘」 「下高上底」
或:10 2 16
(228)10=(11100100)2 =(E4)16
(2)16 10 按權展開
(568)16 =5*162+6*161+8*160 =5*256+6*16+8*1 =(1384)10
或:16 2 10
4、八進制化爲十進制:
例:將八進制數12轉換成十進制數
(12)8 =1*81+2*80 =(10)10
5、八進制化爲二進制:
規則:按照順序,每1位八進制數改寫成等值的3位二進制數,次序不變。
例: (17.36)8 = (001 111 .011 110)2 = (1111.01111)2
6、八進制化爲十六進制
先將八進制化爲二進制,再將二進制化爲十六進制。
例:(712)8 = (1110 0101 0)2 = (1CA)16
轉換爲八進制
7、二進制化爲八進制:
整數部份從最低有效位開始,以3位一組,最高有效位不足3位時以0補齊,每一組都可轉換成一個八進制的值,轉換完畢就是八進制的整數。
小數部份從最高有效位開始,以3位一組,最低有效位不足3位時以0補齊,每一組都可轉換成一個八進制的值,轉換完畢就是八進制的小數。
例:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8
8、十六進制化爲八進制:
先用1化4方法,將十六進制化爲二進制;再用3並1方法,將二進制化爲8進制。
例: (1CA)16 = (111001010)2 = (712)8
說明:小數點前的高位零和小數點後的低位零能夠去除。
9、十進制化八進制
方法1:採用除8取餘法。
例:將十進制數115轉化爲八進制數
8| 115…… 3
8| 14 …… 6
8| 1 …… 1
結果:(115)10 = (163)8
方法2:先採用十進制化二進制的方法,再將二進制數化爲八進制數
例:(115)10 = (1110011)2 = (163)8
5、二進制的位運算(java)
位運算是java中很重要的基礎知識,涉及到數據的讀寫、IO流、數據處理等多方面的知識,熟練掌握位運算對於咱們學習IO相關知識有很大的好處。
含義 |
C語言 |
Java |
|
按位與 |
a and b |
a & b |
a & b |
a or b |
a | b |
a | b |
|
按位異或 |
a xor b |
a ^ b |
a ^ b |
按位取反 |
not a |
~a |
~a |
左移 |
a shl b |
a << b |
a << b |
帶符號右移 |
a shr b |
a >> b |
a >> b |
無符號右移 |
|
|
a>>> b |
(1)、運算說明
=== 1. and運算 & ===
and運算一般用於二進制的取位操做,例如一個數 and 1的結果就是取二進制的最末位。這能夠用來判斷一個整數的奇偶,二進制的最末位爲0表示該數爲偶數,最末位爲1表示該數爲奇數。
相同位的兩個數字都爲1,則爲1;如有一個不爲1,則爲0。
00101
11100
(&;或者and)
----------------
00100
=== 2. or運算 | ===
or運算一般用於二進制特定位上的無條件賦值,例如一個數or 1的結果就是把二進制最末位強行變成1。若是須要把二進制最末位變成0,對這個數or 1以後再減一就能夠了,其實際意義就是把這個數強行變成最接近的偶數。
相同位只要一個爲1即爲1。
00101
11100
(|或者or)
----------------
11101
=== 3. xor運算 ^ ===
異或的符號是^。按位異或運算, 對等長二進制模式按位或二進制數的每一位執行邏輯按位異或操做. 操做的結果是若是某位不一樣則該位爲1, 不然該位爲0.
xor運算的逆運算是它自己,也就是說兩次異或同一個數最後結果不變,即(a xor b) xor b = a。xor運算能夠用於簡單的加密,好比我想對我MM說1314520,但怕別人知道,因而雙方約定拿個人生日19880516做爲密鑰。1314520 xor 19880516 = 20665500,我就把20665500告訴MM。MM再次計算20665500 xor 19880516的值,獲得1314520,因而她就明白了個人企圖。
相同位不一樣則爲1,相同則爲0。
00101
11100
(^或者xor)
----------------
11001
運算結果
x <- x # y
y <- x @ y
x <- x @ y
執行了第一句後x變成了x # y。那麼第二句實質就是y <- x # y @ y,因爲#和@互爲逆運算,那麼此時的y變成了原來的x。第三句中x實際上被賦值爲(x # y) @ x,若是#運算具備交換律,那麼賦值後x就變成最初的y了。這三句話的結果是,x和y的位置互換了。
加法和減法互爲逆運算,而且加法知足交換律。把#換成+,把@換成-,咱們能夠寫出一個不須要臨時變量的swap過程(Pascal)。
#include<stdio.h>
int
main()
{
unsigned
short
a=100;
a=~a;
printf
(
"%d\n"
,a);
return
0;
}