精華筆記:
-
什么是二進制:逢2進1的計數規則,計算機中的變數/常量都是按照2進制來計算的
- 2進制:
- 規則:逢2進1
- 數字:0 1
- 基數:2
- 權:128 64 32 16 8 4 2 1
- 如何將2進制轉換為10進制:
- 正數:將二進制每個1位置的權相加
- 2進制:
-
十六進制:逢16進1的計數規則
- 16進制:
- 規則:逢16進1
- 數字:0 1 2 3 4 5 6 7 8 9 a b c d e f
- 基數:16
- 權:4096 256 16 1
- 用途:因為2進制書寫太麻煩,所以常常用16進制來縮寫2進制
- 如何縮寫:將2進制從低位開始,每4位2進制縮為1位16進制
- 16進制:
-
補碼:--------------------------了解
- 計算機處理有符號數(正負數)的一種編碼方式
- 以4位2進制為例講解補碼的編碼規則:
- 計算的時候如果超出4位則高位自動溢位舍棄,保持4位不變
- 將4位2進制數分一半作為負數使用
- 最高位稱為符號位,高位為1是負數,高位為0是正數
- 規律數:
- 0111為4位補碼的最大值,規律是1個0和3個1,可以推匯出
- 32位補碼的最大值:1個0和31個1------(01111111111111111111111111111111)
- 1000為4位補碼的最小值,規律是1個1和3個0,可以推匯出
- 32位補碼的最小值:1個1和31個0------(10000000000000000000000000000000)
- 1111為4位補碼的-1,規律是4個1,可以推匯出
- 32位補碼的-1:32個1----------------------(11111111111111111111111111111111)
- 0111為4位補碼的最大值,規律是1個0和3個1,可以推匯出
- 深入理解負值:
- 記住32位二進制數的-1的編碼:32個1
- 負值:用-1減去0位置對應的權---------------負數
- 互補對稱現象:-n=~n+1--------取反+1
-
位運算:---------------------了解
-
取反:~
- 運算規則:0變1,1變0
-
與運算:&
- 運算規則:邏輯乘法,見0則0
-
或運算:|
- 運算規則:邏輯加法,見1則1
-
右移位運算:>>>
- 運算規則:將2進制數整體向右移動,低位自動溢位舍棄,高位補0
-
左移位運算:<<
- 運算規則:將2進制數整體向左移動,高位自動溢位舍棄,低位補0
-
移位運算的數學意義:
-
筆記:
-
什么是二進制:逢2進1的計數規則,計算機中的變數/常量都是按照2進制來計算的
-
2進制:
- 規則:逢2進1
- 數字:0 1
- 基數:2
- 權:128 64 32 16 8 4 2 1
-
如何將2進制轉換為10進制:
-
將二進制每個1位置的權相加即可---------------正數
權: 32 16 8 4 2 1 二進制: 1 0 1 1 0 1 十進制: 32+8+4+1=45int n = 45; //編譯時會被編譯為:101101 System.out.println(Integer.toBinaryString(n)); //以2進制輸出 System.out.println(n); //以10進制輸出 n++; //將101101增1----101110 System.out.println(Integer.toBinaryString(n)); //以2進制輸出 System.out.println(n); //以10進制輸出
-
-
-
十六進制:逢16進1的計數規則
-
16進制:
- 規則:逢16進1
- 數字:0 1 2 3 4 5 6 7 8 9 a b c d e f
- 基數:16
- 權:4096 256 16 1
-
用途:因為2進制書寫太麻煩,所以常常用16進制來縮寫2進制
-
如何縮寫:將2進制從低位開始,每4位2進制縮為1位16進制
權: 8 4 2 1 2進制: 0001 1011 1010 1010 0101 16進制: 1 b a a 5-----------1baa5 權: 8 4 2 1 2進制: 0010 1111 1101 0100 0111 1011 16進制: 2 f d 4 7 b------2fd47b 權: 8 4 2 1 2進制: 0010 1001 0101 1010 1011 1001 16進制: 2 9 5 a b 9//演示16進制 int n = 0x2fd47b; //0x表示16進制 int m = 0b0010_1111_1101_0100_0111_1011; //0b表示2進制 System.out.println(Integer.toBinaryString(n)); //按2進制輸出 System.out.println(Integer.toBinaryString(m)); System.out.println(Integer.toHexString(n)); //按16進制輸出 System.out.println(Integer.toHexString(m)); System.out.println(n); //按10進制輸出 System.out.println(m); //演示8進制 int a = 067; //以0開頭的表示8進制 System.out.println(a); //55(6個8加7個1) /* 小面試題:-----8進制平時不用 int a = 068; 正確嗎? 答:編譯錯誤,因為0開頭的表示8進制,最大的數為7 */
-
-
補碼:--------------------------了解
-
計算機處理有符號數(正負數)的一種編碼方式
-
以4位2進制為例講解補碼的編碼規則:
- 計算的時候如果超出4位則高位自動溢位舍棄,保持4位不變
- 將4位2進制數分一半作為負數使用
- 最高位稱為符號位,高位為1是負數,高位為0是正數
-
規律數:
- 0111為4位補碼的最大值,規律是1個0和3個1,可以推匯出
- 32位補碼的最大值:1個0和31個1------(01111111111111111111111111111111)
- 1000為4位補碼的最小值,規律是1個1和3個0,可以推匯出
- 32位補碼的最小值:1個1和31個0------(10000000000000000000000000000000)
- 1111為4位補碼的-1,規律是4個1,可以推匯出
- 32位補碼的-1:32個1----------------------(11111111111111111111111111111111)
int max = Integer.MAX_VALUE; //int的最大值 int min = Integer.MIN_VALUE; //int的最小值 System.out.println(Integer.toBinaryString(max)); //01111111... System.out.println(Integer.toBinaryString(min)); //10000000... System.out.println(Integer.toBinaryString(-1)); //11111111... - 0111為4位補碼的最大值,規律是1個0和3個1,可以推匯出
-
深入理解負值:
-
記住32位二進制數的-1的編碼:32個1
-
負值:用-1減去0位置對應的權---------------負數
1)11111111111111111111111111111111 = -1 2)11111111111111111111111111111101 = -1-2 = -3 3)11111111111111111111111111111010 = -1-1-4 = -6 4)11111111111111111111111111110111 = -1-8 = -9 5)11111111111111111111111111110101 = -1-2-8 = -11 6)11111111111111111111111111010011 = -1-4-8-32 = -45//負值的輸出 int n = -45; System.out.println(Integer.toBinaryString(n)); //以2進制輸出 int m = -11; System.out.println(Integer.toBinaryString(m)); //以2進制輸出
-
-
互補對稱現象:-n=~n+1--------取反+1
-7 = 11111111 11111111 11111111 11111001 = -1-2-4=-7 ~-7 = 00000000 00000000 00000000 00000110 = 2+4=6 ~-7+1 = 00000000 00000000 00000000 00000111 = 1+2+4=7 5 = 00000000 00000000 00000000 00000101 = 1+4=5 ~5 = 11111111 11111111 11111111 11111010 = -1-1-4=-6 ~5+1 = 11111111 11111111 11111111 11111011 = -1-4=-5 12 = 00000000 00000000 00000000 00001100 = 4+8=12 ~12 = 11111111 11111111 11111111 11110011 = -1-4-8=-13 ~12+1 = 11111111 11111111 11111111 11110100 = -1-1-2-8=-12//互補對稱現象: -n=~n+1 int n = -7; int m = ~n+1; System.out.println(m); //7 int i = 12; int j = ~i+1; System.out.println(j); //-12int a = 2147483647; //int的最大值 a = a+1; System.out.println(a); //-2147483648(int的最小值) int b = -2147483648; //int的最小值 b = b-1; System.out.println(b); //2147483647
-
-
位運算:---------------------了解
-
取反:~
- 運算規則:0變1,1變0
-
與運算:&
-
運算規則:邏輯乘法,見0則0
0 & 0 ---------> 0 0 & 1 ---------> 0 1 & 0 ---------> 0 1 & 1 ---------> 1n = 00010111 01110101 01111010 11110110----0x17757af6 m = 00000000 00000000 00000000 11111111----0xff k = n&m = 00000000 00000000 00000000 11110110----0xf6 int n = 0x17757af6; int m = 0xff; //8位掩碼 int k = n&m; System.out.println(Integer.toBinaryString(n)); System.out.println(Integer.toBinaryString(m)); System.out.println(Integer.toBinaryString(k)); 如上運算的意義:k中儲的是n的最后8位,這種運算叫做掩碼運算 一般從低位開始1的個數稱為掩碼的位數
-
-
或運算:|
-
運算規則:邏輯加法,見1則1
0 | 0 ----------> 0 0 | 1 ----------> 1 1 | 0 ----------> 1 1 | 1 ----------> 1n = 00000000 00000000 00000000 11011110 0xde m = 00000000 00000000 10011101 00000000 0x9d00 k = n|m = 00000000 00000000 10011101 11011110 0x9dde int n = 0xde; int m = 0x9d00; int k = n|m; //將n和m錯位合并 System.out.println(Integer.toBinaryString(n)); System.out.println(Integer.toBinaryString(m)); System.out.println(Integer.toBinaryString(k));
-
-
右移位運算:>>>
-
運算規則:將2進制數整體向右移動,低位自動溢位舍棄,高位補0
n = 01101011 00111111 01011110 00111010----0x6b3f5e3a m = n>>>1 00110101 10011111 10101111 00011101 k = n>>>2 00011010 11001111 11010111 10001110 g = n>>>8 00000000 01101011 00111111 01011110 int n = 0x6b3f5e3a; int m = n>>>1; int k = n>>>2; int g = n>>>8; System.out.println(Integer.toBinaryString(n)); System.out.println(Integer.toBinaryString(m)); System.out.println(Integer.toBinaryString(k)); System.out.println(Integer.toBinaryString(g));
-
-
左移位運算:<<
-
運算規則:將2進制數整體向左移動,高位自動溢位舍棄,低位補0
n = 01101110 10111100 00111011 00111011-------0x6ebc3b3b m = n<<1 11011101 01111000 01110110 01110110 k = n<<2 10111010 11110000 11101100 11101100 g = n<<8 10111100 00111011 00111011 00000000 int n = 0x6ebc3b3b; int m = n<<1; int k = n<<2; int g = n<<8; System.out.println(Integer.toBinaryString(n)); System.out.println(Integer.toBinaryString(m)); System.out.println(Integer.toBinaryString(k)); System.out.println(Integer.toBinaryString(g));
-
-
移位運算的數學意義:
int n = 5; int m = n<<1; int k = n<<2; int g = n<<3; System.out.println(m); //10----相當于5*2 System.out.println(k); //20----相當于5*4 System.out.println(g); //40----相當于5*8 /* 權: 64 32 16 8 4 2 1 n: 0 1 0 1 = 5 m: 0 1 0 1 = 10 k: 0 1 0 1 = 20 g: 0 1 0 1 = 40 */
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501578.html
標籤:其他
