1. 程式人生 > >Java菜鳥逆襲之基礎語法下

Java菜鳥逆襲之基礎語法下

前提知識點2:原碼,反碼,補碼
 有符號資料表示法
• 在計算機內,有符號數有3種表示法:原碼、反碼和補碼。所有資料的運算都是採用補碼進行的。
• 原碼
• 就是二進位制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
• 反碼
• 正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
• 補碼
• 正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

左移運算:整數左移應該是先轉為二進位制,左邊移動相應位數,右邊補0,符號位不變。

-9>>2
-9的原碼:10000000 00000000 00000000 00001001
-9的反碼:11111111 11111111 11111111 11110110
-9的補碼:11111111 11111111 11111111 11110111
右移兩位:1111111111 11111111 11111111 111101
求回原碼: 1.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11—— -3

左移運算:數值a向左移動n位,得到的值是a*2的n次方。
右移運算:數值a向右移動n位,得到的值是a*2的-n次方。—-直接取到小於商的最大整數

移位規則規定:
/*
右移:
如果是有符號右移,首先看正數還是負數,對正數右移,高位補0,符號位也就是最高位不變;對負數右移,
* 需要先把負數的補碼錶示出來,然後進行右移,高位補1,最高位不變,好了之後再進行求原碼。
* 如果是無符號右移,正數跟有符號右移一樣,負數需要先把補碼錶示出來,然後進行右移,高位補0,然後直接
* 計算十進位制即可。

左移:對負數和整數進行左移都要保持最高位不變,右邊都補0.因為右邊不牽扯正負號問題。另外負數左移也需要先轉補碼。
*
*/
9<<2:
1. 先求出9的二進位制:
2. 對二進位制求補碼。
3. 移位運算,法則參考上面註釋的描述。

難點:對負數求右移操作
//求一個負數的移位運算結果
int a=-9;
// 將a轉為二進位制,由於a為負數,所以最高位應該為1,1代表負號
// 原碼 10000000 00000000 000000000 00001001
// 負數在計算機裡面是以補碼的方式儲存的,原碼需要變成補碼,原碼求補碼,符號位不變
// 其他位取反然後加1,按照這個方式,補碼為:11111111 11111111 11111111 11110111
// 右移2位 最後兩位沒有了,前面補兩位1也就是負號。 11111111 1111111 11111111 11111101
// 補碼求原碼 ,計算方式跟原碼求補碼一樣:10………………..。11 結果就是-3
System.out.println(a>>2);
這裡寫圖片描述

邏輯運算:
&&(邏輯與),||(邏輯或),!邏輯非(這三個運算子算出來的結果也只有兩個值:false,true)
邏輯與:只要有一個為false,最後表示式結果false 乘法運算,false代表0,true代表1
邏輯或:有一個為true,最後結果true 加法運算:false代表0,true代表1

邏輯運算短路現象:當整個表示式的值已經確定時候,後面的表示式部分不參與運算。

int a=9;
int b=8;
System.out.println(9>0||((a=a+1)==13));//右邊的式子不參與運算原因是左邊為true,在
//邏輯或裡面有一端為true,整個表示式就是true
System.out.println(a);//9

按位運算子
和邏輯運算相似,&代表與運算(乘法運算),|代表或運算(加法運算),^代表異或(相同為0,不同為1) ,~代表取相反。

按位與:&對0,1進行運算 有一個為0,最後按位與的結果就是0,相當於乘法
按位或:|,有一個為1,最後結果為1,相當於加法
按位非:~ 非0就是1,非1就是0
按位異或:^ 相同為0,不同為1

要進行位運算,首先要會轉二進位制:
整數轉二進位制,除以2取餘數,最後一直算到被除數小於2為止。最後將餘數倒著寫出來即可。
int a=9;
int b=8;
System.out.println(a&b);//8
System.out.println(a|b);//9
System.out.println(~b);//7
System.out.println(a^b);//1

自增自減運算子:
i++ (自加運算子) 整個表示式的值不變,但是i的值加了個1,先求值,再運算

i– 整個表示式的值不變,但是i的值減了個1,先賦值,再運算
++i 整個表示式的值加1,i的值加了個1—–先運算,再賦值
–i 整個表示式的值減1,i的值減了個1 —–先運算,再賦值

8.String字串初探
屬性+方法
雙引號裡面寫文字,連線多個字串及變數用+
構建字串變數有兩種方式:
1) String str=new String(“sssssssssssssss”);
2) String str=”ssssssssssssssssssss”
字串如果要進行拼接:str=str+”anoter string”;
String類裡面有哪些常用的功能?
1. 字串長度str.length()
2. Str.charAt(i) I 從0開始的。

9.鍵盤輸入

/*
* 讓使用者輸入姓名,年齡,家庭住址,然後打印出個人具體資訊
*/
Scanner scan=new Scanner(System.in);
System.out.println(“input your name:”);
String name=scan.next();
System.out.println(“input your age:”);
int age=scan.nextInt();
System.out.println(“input your address:”);
String address=scan.next();
//拼接字串
String info=”“;
info=info+”學生姓名:”+name+”,年齡:”+age+”,地址:”+address;
System.out.println(info);