世界上又兩種人,認識二進制的和不認識二進制的人java
283975 #按照權值進行分型 2 * 10^5 #該位置數字乘以權值 + 8 *10^ + 3*10^3 + 9*10^2 + 7*10^1 + 5*10^0 # 權值 = 10^N 十進制數
0xffff 使用前綴ox表示該數字爲十六進制數
07使用0前綴表示八進制
0b二進制
bash
示例:00110110轉換爲十進制數 2^1 + 2^2 + 2^4 + 2^5 = 2+4+16+32 = 54 示例:0x2371轉換爲十進制數 1*16^0 + 7*16^1 + 3*16^2 + 2*16^3 = 1+112+768+8192 = 9073
二進制 | 八進制 | 十六進制 | 十進制 |
---|---|---|---|
0000 | 0 | 0 | 0 |
0001 | 1 | 1 | 1 |
0010 | 2 | 2 | 2 |
0011 | 3 | 3 | 3 |
0100 | 4 | 4 | 4 |
0101 | 5 | 5 | 5 |
0110 | 6 | 6 | 6 |
0111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | A | 10 |
1011 | 13 | B | 11 |
1100 | 14 | C | 12 |
1101 | 15 | D | 13 |
1110 | 16 | E | 14 |
1111 | 17 | F | 15 |
10000 | 20 | F1 | 16 |
10001 | 21 | F2 | 17 |
ps. 0b1111 1111 = 0x ff
ps.計算機底層存儲數據使用二進制
函數
示例:將十六進制數 0x2B3C7F82轉換爲二進制 2 B 3 C 7 F 8 2 0010 1011 0011 1100 0111 1111 1000 0010 示例:將二進制數 01111010111010101010110010101100轉十六進制 0111 1010 1110 1010 1010 1100 1010 1100 6 A E A A C A C 結果爲:0x6AEAACAC
正數的補碼是其原碼,負數的補碼爲其反碼加一測試
ps.反碼即該編碼各位上的數依次取反的結果
編碼
示例: 0000 0111 byte型整數:十六進制 0x07 十進制 7 1110 0110 byte型負數:十六進制 0x1A 十進制 26 減一:1110 0110 - 1 = 1110 0101 取反:0001 1010
byte型 最大值:1111 1111 : -1 最小值:1000 1000 : -128 short型 最大值:0111 1111 1111 1111 = 0x7FFFF = 32767 最小值:1000 0000 0000 0000 = 0x8000 = -32768 int型 最大值:0111 1111 1111... = 0x7FFFFFFF 最小值:1000 0000 0000... = 0x80000000 long型 最大值:0x7FFFFFFFFFFFFFFF 最小值:0x8000000000000000 char型 最大值:0xFFFF 最小值:0x0000
位運算 | 運算 | 示例 |
---|---|---|
<< | 左移(保留符號位) | 3<<2 = 12 (左移兩位 322) |
>> | 右移(保留符號位) | 3>>1=1 (0011 => 0001) |
>>> | 無符號右移 | 3>>>1 |
& | 與運算 | 6 & 3 = 2 |
| | 或運算 | 6 | 3 = 7 |
^ | 異或運算 | 6 ^ 3 = 5 |
~ | 取反 | ~ 6 = -7 |
示例: public class BinaryTest{ public static void main(String[] args){ byte b = (byte)0xC2; // 0x000000C2 System.out.println(b); System.out.println(b << 2); //-248 } }
ps.位運算是直接對二進制進行運算
code
public class BinaryTest{ public static void main(String[] args){ int n1 = 0xd7; int n2 = 0xc5; // int n1 = 0x7a; // int n2 = 0x9c; /* d7:1101 0111 c5:1100 0101 &: 1100 0101 |: 1101 0111 ^: 0001 0110 ni:0011 1010 n2:0011 1010 */ // 0111 1010 // 1001 1100 // 0001 1000 = 24 System.out.println(n1 & n2); // 0111 1010 // 1001 1100 // 1111 1110 = 254 System.out.println(n1 | n2); // 0111 1010 // 1000 0101 = -123 System.out.println(~n1); // 1001 1100 // 0110 0011 = -157 System.out.println(~n2); // 0111 1010 // 1001 1100 // 1110 0110 = 230 System.out.println(n1 ^ n2); } }
int n = 10; n = n++; system.out.println("n="+n); //n的值爲10 賦值語句從右至左 // 右n的值爲10待賦值給左 // 右n自增爲11 // 將待賦值的10賦值給左側 //結束
short s =3; s = s+2; //發生了類型變化 右側爲int型 s+=2; // 未發生類型變化
運算符 | 運算 | 範例 | 結果 | 適用範圍 |
---|---|---|---|---|
== | 相等於 | 1 == 1 | true | 全部數據 |
!= | 不等於 | 1 != 1 | false | 全部數據 |
< | 小於 | 2<3 | true | 基本數據 |
> | 大於 | 2>3 | false | 基本數據 |
<= | 小等於 | 2<=3 | true | 基本數據 |
>= | 大等於 | 2>3 | false | 基本數據 |
instanceof |
ps. & 運算兩邊都會參與運算 不會短路 && 運算會短路
對象
a | b | a&b | a|b | !a | a&&b | a^b | a||b |
---|---|---|---|---|---|---|---|
true | fase | true | true | fase | true | fase | true |
true | fase | fase | true | fase | fase | true | true |
fase | true | fase | true | true | fase | true | true |
fase | true | fase | fase | true | fase | fase | fase |
示例: 3<x<6 //錯誤寫法 x>3 & x<6 int x = 1; int y = 1; if(x++ == 2 & ++ y =2) System.out.println("判斷爲真!"); //此處 x最終爲2 y最終爲2 int x = 1; int y = 1; if(x++ == 2 && ++ y =2) System.out.println("判斷爲真!"); //此處 x最終爲2 y最終爲1 發生了運算短路
(條件表達式)?表達式1:表達式2blog
變量以下: int n = 10; int m = 20; int k = 40; int max; 示例:取兩個數中較大的數 max = (n>m)?n:m; 示例:取出三個數中的較大數 max = (n>m)?(n>k)?n:k:(m>k)?m:k
從左到右,搞優先級優先進行運算get
當括號中的條件爲真時執行後面的分支內容。it
ps.java中分支結構括號中的內容必須時布爾型
if(a == 0) System.out.println("a等於0"); if(a != 0 ){ System.out.println("a不等於0"); System.out.println("請從新輸入!"); }
當括號中的條件爲真時,執行if後的分支內容,括號條件爲假時,執行else後的分支內容。
if(a == 0) System.out.println("a等於0"); else{ System.out.println("a不等於0"); System.out.println("請從新輸入!"); }
判斷規則與if-else相同,將if-else進行嵌套。
if(a == 0) System.out.println("a等於0"); else if(a == 1) System.out.println("a等於0"); else { if (a==3) System.out.println("a等於3"); System.out.println("a不等於1或者0"); }
變量的數據類型:byte,int,char,short,String,枚舉型
switch(變量){ case 常量1: ... break; case 常量2: ... break; case 常量3: ... break; case 常量4: ... break; case 常量5: ... break; default: ... break; }
在某些條件知足的狀況下,反覆執行特定代碼的功能,包含一下四個部分。
ps.while循環、do/while循環、for循環
語法格式
while(布爾型測試表達式){ ... 循環條件修改語句; }
示例: public void testWhile(){ int count; //初始化語句 int i = 1; //循環因子 while(i<10){ //循環條件 count += i; //循環體語句 i++; //迭代語句 } System.out.println("count:"+count); }
語法格式
do{ ... 循環條件修改語句; }while(布爾型測試表達式)
示例: public void testDoWhile{ int result = 0,i=1; //初始化語句及循環因子 do{ result+=i //循環體語句 i++ //迭代語句 }while(i<=5)//循環條件 System.out.println("result:"+result); }
語法格式
for(初始化語句;布爾測試表達式;循環條件修改語句){ ... }
int count; for(int i=1; i<100; i++) count+=i; System.out.println("count:"+count);
當循環次數不肯定時,優選while循環。
示例: boolean flag = true; while(flag){ ... } do{...}while(flag)//至少循環一次
示例: boolean flag = true; for(;;;){...} for(;flag;){...}
break語句用於終止某個語句塊的執行。
示例: for(int i=0; i<10; i++) if( i==3 ) break; label:for(int i=0; i<10; i++){ for(int i=0; i<10; i++) if( i==3 ) break lable; }
只能用於循環語句,跳過某次循環。
結束方法,方法執行的返回。
某種功能的封裝 方法 = 方法簽名 + 方法體
方法是類或對象行爲特徵的抽象,也成爲函數。Java中方法不能獨立存在,必須在類中定義。
語法格式
權限修飾符 返回值類型 方法名(參數類型 參數1,參數類型 形參2,...){ ... return 返回值; }
示例: public String printHello(int name){//方法簽名 Stirng hello = "Hello! "+ name; return hello; } public static void main(String args[]){ //方法調用 String welcome = printHello(); //int a = printHello(); × }
形式參數:在方法被調用時用於接收外部傳入的數據的變量
參數類型:形式參數的數據類型
返回值:方法在執行完畢後返還給調用它的程序的數據
返回值類型:方法要返回的結構的數據類型
實際參數:調用方法時實際穿個函數形式參數的數據
ps. 返回值爲void的方法表示無返回值
重載讓方法調用變得簡單
在同一個類中,方法名相同,參數不一樣就造成重載。參數不一樣體如今類型不一樣、順序不一樣、參數個數不一樣。
示例: public class OverLoadTest{ public static int add(int a, int b){ return a+b; } public static int add(int a, byte b){ return a+b; } public static int add(int a, double b){ return (int)a+b; } }
java中只有值傳遞,形參是實參的一個複製品。
方法棧中的組成單元,包括了方法及其局部變量。
一個先進後出的結構,用於存放方法,其單元由棧幀組成。
說明:
經過類名大寫加上.
的方式能夠訪問該類的靜態方法。
public class Method{ public static String getMethod(){ return "Method"; } } public class Test{ public static void main(String[] args){ String method = Method.getMethod; Sysem.out.println() } }