進制介紹:
對于整數,有四種表示方式:
①二進制:0,1 ,滿 2 進 1.以 0b 或 0B 開頭,
②十進制:0-9 ,滿 10 進 1,
③八進制:0-7 ,滿 8 進 1. 以數字 0 開頭表示,
④十六進制:0-9 及 A(10)-F(15),滿 16 進 1. 以 0x 或 0X 開頭表示,
此處的 A-F 不區分大小寫,
| 十進制 | 十六進制 | 八進制 | 二進制 |
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 10 |
| 3 | 3 | 3 | 11 |
| 4 | 4 | 4 | 100 |
| 5 | 5 | 5 | 101 |
| 6 | 6 | 6 | 110 |
| 7 | 7 | 7 | 111 |
| 8 | 8 | 10 | 1000 |
| 9 | 9 | 11 | 1001 |
| 10 | A | 12 | 1010 |
| 11 | B | 13 | 1011 |
| 12 | C | 14 | 1100 |
| 13 | D | 15 | 1101 |
| 14 | E | 16 | 1110 |
| 15 | F | 17 | 1111 |
| 16 | 10 | 20 | 10000 |
| 17 | 11 | 21 | 10001 |
進制的轉換:
第一組(轉十進制)
二進制轉十進制:
規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以2的(位數-1)次方,然后求和
案例:請將0b1011轉成十進制的數
0b1011=1*2的(1-1)次方 + 1*2的(2-1)次方 + 0*2的(3-1)次方+ 1*2的(4-1)次方
=1+2+0+8=11
八進制轉十進制:
規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以8的(位數-1)次方,然后求和
案例:請將0234轉成十進制的數
0234=4*8^0+3*8^1+2*8^2=4+24+128=156
十六進制轉十進制:
規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以16的(位數-1)次方,然后求和
案例:請將0x23A轉成十進制的數
0x23A=10*16^0+3*16^1+2*16^2=10+48+512=570
第二組(十進制轉)
十進制轉二進制:
規則:將該數不斷除以 2,直到商為 0 為止,然后將每步得到的余數倒過來,就是對應的二進制,
案例:請將 46 轉成二進制 = 0B00101110

一個位元組有八位,101110才六位,不夠八位,所以前面要加上兩個0
十進制轉八進制:
規則:將該數不斷除以 8,直到商為 0 為止,然后將每步得到的余數倒過來,就是對應的二進制,
案例:請將 131 轉成二進制 = 0203

?
十進制轉十六進制:
規則:將該數不斷除以 16,直到商為 0 為止,然后將每步得到的余數倒過來,就是對應的二進制,
案例:請將 237 轉成二進制 = 0xED

?
第三組(二進制轉)
二進制轉八進制:
規則:從低位開始,將二進制數每三位一組,轉成對應的八進制數即可,
案例:請將 ob11010101 轉成八進制
ob11 (3) 010 (2) 101 (5) => 0325
二進制轉十六進制:
規則:從低位開始,將二進制數每四位一組,轉成對應的十六進制數即可,
案例:請將 ob11010101 轉成十六進制
ob1101 (D) 0101 (5) = 0xD5
第四組(轉二進制)
八進制轉二進制:
規則:將八進制數每 1 位,轉成對應的一個 3 位的二進制數即可,
案例:請將 0237 轉成二進制
0 2(010) 3 (011) 7 (111) = 0b10011111
十六進制轉二進制:
規則:將十六進制數每 1 位,轉成對應的 4 位的一個二進制數即可,
案例:請將 0x23B 轉成二進制
0x2 (0010) 3 (0011) B (1011) = 0b001000111011
原碼、反碼、補碼(重點 難點)
★★★背下來
對于有符號的而言:
1.二進制的最高位是符號位:0表示正數,1表示負數
2.正數的原碼,反碼,補碼都一樣(三碼合一)
3.負數的反碼=它的原碼符號位不變,其他位取反(0->1, 1->0)
4.負數的補碼=它的反碼+1,負數的反碼=負數的補碼-1
5.0的反碼,補碼都是0
6.Java沒有無符號數,換言之,Java中的數都是有符號的
7.在計算機運算的時候,都是以補碼的方式來運算的,
8.當我們看運算結果的時候,要看他的原碼(重點)
位運算子:
java 中有 7 個位運算(&、|、^、~、>>、<<和 >>>)
分別是按位與&、按位或|、按位異或^、按位取反~,它們的運算規則是:
按位與&:兩位全為1,結果為1,否則為0
按位或|:兩位有一個為1,結果為1,否則為0
按位異或^:兩位一個為0,一個為1,結果為1,否則為0
按位取反~:0->1,1->0
位運算子注意事項:
(1)算術右移 >>:低位溢位,符號位不變,并用符號位補溢位的高位
(2)算術左移 <<: 符號位不變,低位補 0
(3)>>> 邏輯右移也叫無符號右移,運算規則是: 低位溢位,高位補 0
(4)特別說明:沒有 <<< 符號
位運算子練習題1:2&3=? ~-2=? ~2=? 2|3=? 2^3=?
System.out.println(2&3);//2
//第一題推導程序:
//1.先得到2的原碼:00000000 00000000 00000000 00000010
// 然后求2的補碼:00000000 00000000 00000000 00000010
//2.先得到3的原碼:00000000 00000000 00000000 00000011
// 然后求3的補碼:00000000 00000000 00000000 00000011
//3.2按位與&3
//00000000 00000000 00000000 00000010
//00000000 00000000 00000000 00000011
//&運算后的結果:00000000 00000000 00000000 00000010
//答案為2
System.out.println(~-2);//1
//第二題推導程序:
//1.先得到-2的原碼:10000000 00000000 00000000 00000010
// 然后求-2的反碼:11111111 11111111 11111111 11111101
// 緊接著-2的補碼:11111111 11111111 11111111 11111110
//2.按位取反-2 00000000 00000000 00000000 00000001
//答案為1
System.out.println(~2);//-3
//第三題推導程序:
//1.先得到2的原碼:00000000 00000000 00000000 00000010
// 然后求2的補碼:00000000 00000000 00000000 00000010
//2.按位取反2: 11111111 11111111 11111111 11111101
//3.反碼: 11111111 11111111 11111111 11111100
//4.原碼: 10000000 00000000 00000000 00000011
//答案為-3
System.out.println(2|3);//3
//第四題推導程序:
//1.得到2的補碼:00000000 00000000 00000000 00000010
//2.得到3的補碼:00000000 00000000 00000000 00000011
//按位或運算: 00000000 00000000 00000000 00000011
//答案為3
System.out.println(2^3);//1
//第五題推導程序:
//1.得到2的補碼:00000000 00000000 00000000 00000010
//2.得到3的補碼:00000000 00000000 00000000 00000011
//按位異或運算: 00000000 00000000 00000000 00000001
//答案為1
位運算子練習題2:int a=1>>2;int b=-1>>2;int c=1<<2;int d=-1<<2;int e=3>>>2;
int a=1>>2; // 1 向右位移 2 位 1/2/2=0
int b=-1>>2;//算術右移
int c=1<<2;//算術左移 1*2*2=4
int d=-1<<2;// -1*2*2=-4
int e=3>>>2;//無符號右移 00000011 ->00 000000
//a,b,c,d,e 結果是多少
System.out.println("a="+a); //0
System.out.println("b="+b); //-1
System.out.println("c="+c); //4
System.out.println("d="+d); //-4
System.out.println("e="+e); //0
//-1原碼:10000000 00000000 00000000 00000001
//-1反碼:11111111 11111111 11111111 11111110
//-1補碼:11111111 11111111 11111111 11111111
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295312.html
標籤:其他
