位運算及進位轉換 1.1 標識符的命名規則和規範 1.1.1 標識符概念 Java對各種變數、方法和類等命名時使用的字元序列稱為標識符 凡是自己可以起名字的地方都叫做標識符 int num = 88; 1.1.2 標識符的命名規則 由26個英文字母大小寫,0-9,_或$組成 不可以以數字開頭。int ...
位運算及進位轉換
目錄- 位運算及進位轉換
1.1 標識符的命名規則和規範
1.1.1 標識符概念
- Java對各種變數、方法和類等命名時使用的字元序列稱為標識符
- 凡是自己可以起名字的地方都叫做標識符 int num = 88;
1.1.2 標識符的命名規則
- 由26個英文字母大小寫,0-9,_或$組成
- 不可以以數字開頭。int 3ab = 1; //錯誤
- 不可以使用關鍵字和保留字。但能包含關鍵字和保留字
- Java中嚴格區分大小寫,長度無限制。int totalNum = 10; int n = 90;
- 標識符1不能包含空格。 int a b = 10;//錯誤
1.1.3 練習(判斷變數名是否正確)
abc //ok
abc123 //ok
1abc //no 不能以數字開頭
a-h //no 不能用-
a h //no 不能有空格
s$3 //ok
class //no 不能使用關鍵字
int //no 不能使用關鍵字
public //no 不能使用關鍵字
double //no 不能使用關鍵字
static //no 不能使用關鍵字
goto //no 不能使用保留字
stu_name //ok
1.1.4 標識符命名規範
1)包名:多單片語成時所有字母都小寫:aaa.bbb.ccc //比如: com.hsp.com
2)類名、介面名:多單片語成時,所有單詞首字母大寫:XxxYyyZzz[大駝峰] //比如:TankShotGame
3)變數名、方法名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz[小駝峰,簡稱 駝峰法] //比如:tankShotGame
4)常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接:XXX_YYY_ZZZ 比如:定義一個所得稅率 TAX_RATE
1.2 關鍵字
關鍵字的定義和特點(不用背
)
定義:被Java語言賦予了特殊含義,用做專門用途的字元串(單詞)
特點:關鍵字中所有的字母都為小寫
用於定義數據類型的關鍵字
class | interface | enum | byte | short |
---|---|---|---|---|
int | long | float | double | char |
boolean | void |
用於定義數據類型值的關鍵字
true | false | null |
---|---|---|
用於定義流程式控制制的關鍵字
if | else | switch | case | default |
---|---|---|---|---|
while | do | for | break | continue |
return |
用於定義訪問許可權修飾符的關鍵字
private | protected | public |
---|---|---|
用於定義類、函數、變數修飾符的關鍵字
abstract | final | static | synchronized |
---|---|---|---|
用於定義類與類之間的關鍵字
extends | implements |
---|---|
用於定義建立實例及引用實例,判斷實例的關鍵字
new | this | super | instanceof |
---|---|---|---|
用於異常處理的關鍵字
try | catch | finally | throw | throws |
---|---|---|---|---|
用於包的關鍵字
package | import |
---|---|
其他修飾符的關鍵字
native | strictfp | transient | volatile | assert |
---|---|---|---|---|
1.3 保留字
1.3.1 介紹
Java保留字:現有Java版本尚未使用
,但以後版本可能會作為關鍵字使用
。自己命名標識符要避免使用這些保留字byValue、cast、future、generic、inner、operator、outer、rest、var、goto、const。
1.4 鍵盤輸入語句
1.4.1 介紹
在編程中,需要接收用戶輸入的數據,就可以使用鍵盤輸入語句來獲取。Input.java,需要一個掃描器(對象),就是Scanner。
1.4.2 步驟
1)導入該類的所在包,java.util.*
2)創建該類對象(聲明對象)
3)調用裡面的功能
1.4.3 案例演示
要求:可以從控制台接收用戶信息,【姓名,年齡,薪水】
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
/*
步驟:
1.導入Scanner類 所在的包
2.創建Scanner對象,new創建一個對象
3.接收用戶輸入,使用相關方法
*/
Scanner myScanner = new Scanner(System.in);
System.out.println("請輸入姓名:");
String name = myScanner.nextLine();//接收用戶輸入的字元串
System.out.println("請輸入年齡:");
int age = myScanner.nextInt();//接收用戶輸入的年齡
System.out.println("請輸入薪水");
double sal = myScanner.nextDouble(); //接收用戶輸入的薪水
System.out.println("人的信息如下:");
System.out.println("名字=" + name + " 年齡=" + age + " 薪水=" + sal);
}
}
1.5 進位(程式員的基本功)
1.5.1 進位介紹
對於整數,有四種表示方式:
二進位: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不區分大小寫。
1.5.2 演示四種進位
public class BinaryTest {
public static void main(String[] args) {
//n1 二進位
int n1 = 0b1010;
//n2 十進位
int n2 = 1010;
//n3 八進位
int n3 = 01010;
//n4 十六進位
int n4 = 0x1010;
System.out.println("n1=" + n1);
System.out.println("n2=" + n2);
System.out.println("n3=" + n3);
System.out.println("n4=" + n4);
System.out.println(0x23A);
}
}
1.5.3 進位的圖示
十進位 | 十六進位 | 八進位 | 二進位 |
---|---|---|---|
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 | 8 | 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 |
1.5.4 進位的轉換(基本功)
進位轉換的介紹
-
第一組
1)二進位轉十進位
2)八進位轉十進位
3)十六進位轉十進位
-
第二組
1)十進位轉二進位
2)十進位轉八進位
3)十進位轉十六進位
-
第三組
1)二進位轉八進位
2)二進位轉十六進位
-
第四組
1)八進位轉二進位
2)十六進位轉二進位
1.6 其他進位轉十進位
1.6.1 二進位轉十進位
規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以2的(位數-1)次方,然後求和。
案例:請將0b1011轉成十進位的數
0b1011 = 1 * 2⁰ + 1 * 2¹ + 0 * 2² + 1 * 2³ = 1 + 2 + 0 + 8 = 11
1.6.2 八進位轉十進位
規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以8的(位數-1)次方,然後求和。
案例:請將0234轉成十進位的數
0234 = 4 * 8⁰ + 3 * 8¹ + 2 * 8² = 4 + 24 + 128 = 156
1.6.3 十六進位轉十進位
規則:從最低位(右邊)開始,將每個位上的數提取出來,乘以16的(位數-1)次方,然後求和。
案例:請將 0x23A 轉成十進位的數
0x23A = 10 * 16⁰ + 3 * 16¹ + 2 * 16² = 10 + 48 + 512 = 570
小練習:請將
0b 1 1000 1100 轉成 十進位
1 * 2² + 1 * 2³ + 1 * 2⁷ + 1 * 2⁸ = 256 + 128 + 8 + 4 = 396
0 2456 轉成十進位
6 * 8⁰ + 5 * 8¹ + 4 * 8² + 2 * 8³ = 6 + 40 + 256 + 1024 = 1326
0x A45 轉成十進位
5 * 16⁰ + 4 * 16¹ + 10 * 16² = 5 + 64 + 2560 = 2629
1.7 十進位轉其他進位
1.7.1 十進位轉二進位
規則:將該數不斷除以2,直到商為0為之,然後將每步得到的餘數倒過來,就是對應的二進位。
案例:請將 34 轉成二進位 = 0B00100010
1.7.2 十進位轉八進位
規則:將該數不斷除以 8,直到商為 0 為止,然後將每步得到的餘數倒過來,就是對應的八進位。
案例:請將 131 轉成八進位 => 0203
1.7.3 十進位轉十六進位
規則:將該數不斷除以 16,直到商為 0 為止,然後將每步得到的餘數倒過來,就是對應的十六進位。
案例:請將 237 轉成十六進位 => 0xED
小練習:
123 轉成 二進位 => 0b 111 1101
678 轉成 八進位 => 0 1246
8912 轉成 十六進位 => 0x 22D0
1.8 二進位轉八、十六進位
1.8.1 二進位轉八進位
規則:從低位開始,將二進位數每三位一組,轉成對應的八進位數即可。
案例:請將 ob11010101 轉成八進位
ob11(3)010(2)101(5) => 0325
1.8.2 二進位轉十六進位
規則:從低位開始,將二進位數每四位一組,轉成對應的十六進位數即可。
案例:請將 ob11010101 轉成十六進位
ob1101(D)0101(5) = 0xD5
課堂練習:請將
0b11100101 轉成 八進位
0b1110010110 轉成 十六進位
1.9 八、十六進位轉二進位
1.9.1 八進位轉二進位
規則:將八進位數每 1 位,轉成對應的一個 3 位的二進位數即可。
案例:請將 0237 轉成二進位
02(010)3(011)7(111) = 0b10011111
1.9.2 十六進位轉二進位
規則:將十六進位數每 1 位,轉成對應的 4 位的一個二進位數即可。
案例:請將 0x23B 轉成二進位
0x2(0010)3(0011)B(1011) = 0b001000111011
課堂練習:請將
01230 轉成 二進位
0xAB29 轉成二進位
1.10 原碼、反碼、補碼(重點 難點)
1.10.1 二進位在運算中的說明
1)二進位是逢2進位的進位制,0、1是基本算符。
2)現代的電子電腦技術全部採用的是二進位,因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。電腦內部處理的信息,都是採用二進位數來表示的。二進位(Binary) 數用0和1兩個數字及其組合來表示任何數。進位規則是"逢2進1",數字1在不同的位上代表不同的值,按從右至左的次序,這個值以二倍遞增。
1.10.2 原碼、反碼、補碼要點
對於有符號的來說:
1)二進位的最高位是符號位:0表示正數,1表示負數(口訣:0->0,1->-[0倒過來還是0,1倒過來變成負數])
2)正數的原碼,反碼,補碼都一樣(三碼合一)
3)負數的反碼 = 原碼符號位不變,其他位按位取反(0變1,1變0)
4)負數的補碼 = 負數的反碼 + 1,負數的反碼 = 負數的補碼 - 1
5)0的反碼,補碼都是0
6)Java沒有無符號數,換言之,Java中的數都是有符號的
7)在電腦運算的時候,都是以補碼的方式來運算
的
8)當我們看運算結果的時候,要看他的原碼
(重點)
1.12 位運算
1.12.1 簡單思考題
- 請看下麵的代碼段,回答 a,b,c,d,e 結果是多少?
public class BitOperator01 {
public static void main(String[] args) {
int a = 1 >> 2; //向右位移2位
int b = -1 >> 2; //算術右移
int c = 1 << 2; //向左位移2位
int d = -1 << 2; //算術左移
int e = 3 >>> 2; //無符號右移
//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
}
}
- 請回答在 Java 中,下麵的表達式運算的結果是: (位操作)
~2=? // 按位取反
2&3=?// 2 按位與 3
2|3=?
~-5=?
13&7=?
5|4=?
-3^3=?//^ 按位異或
1.12.2 位運算符介紹
Java中有7個位運算(&、|、^、~、>>、<< 和 >>>)
1.12.3 >>、<< 和 >>> 的運算規則
1)算術右移>>:低位溢出,符號位不變,並用符號位補溢出的高位
2)算術右移<<:符號位不變,低位補0
3)>>> 邏輯右移也叫無符號右移,運算規則是: 低位溢出,高位補 0
- 特別說明:沒有 <<< 符號
1.12.4 應用案例 BitOperator01.java
-
int a=1>>2; //1 => 00000001 => 00000000 本質 1 / 2 / 2 =0
-
int c=1<<2; //1 => 00000001 => 00000100 本質 1 * 2 * 2 = 4
1.13 本章作業
一、計算下列表達式的結果
10 / 3 = 3; 10 % 2 = 0;
10 / 5 = 2; -10.5 % 3 = ;
a % b當a是小數時,公式 = a - (int)a / b * b
-10.5 % 3 = -10.5 - (-10) / 3 = -10.5 + 9 = - 1.5
註意:有小數運算,得到結果是近似值
二、試說出下麵代碼結果
int i = 66;
System.out.println(++i+i); //執行i=i+1 => i = 67 => 134
三、在Java中,以下賦值語句正確的是(CD)
A) int num1=(int)"18";//錯誤應該Integer.parselnt("18");B) int num2=18.0;M/錯誤double -> int
C) double num3=3d;M/ok
D) double num4=8;M/ok int -> doubleE) int i=48; char ch =i+1;1/錯誤int ->char
F) byte b = 19; short s = b+2;//錯誤int ->short
四、試寫出將String轉換成double類型的語句,以及將char類型轉換成String的語句,舉例說明即可,寫簡單代碼
String str = "18.8"