03、Java語言的運算符

排骨玉米湯 2022-01-08 03:33:04 阅读数:356

java

1、運算符(重點)

1.1、算術運算符

• + 錶示加法運算符
• - 錶示减法運算符
• * 錶示乘法運算符
• / 錶示除法運算符
• % 錶示取模/取餘運算符
/* 編程實現算術運算符的使用 */
public class ArithmeticTest {

public static void main(String[] args) {

// 1.聲明兩個int類型的變量並初始化
//int ia = 6, ib = 2; // 錶示聲明兩個int類型的變量ia和ib,不推薦使用
int ia = 6; // 推薦該方式,提高了代碼的可讀性
int ib = 2;
System.out.println("ia = " + ia); // ia = 6
System.out.println("ib = " + ib); // ib = 2
System.out.println("----------------------------------------");
// 2.使用上述變量實現算術運算符的使用 + - * / %
// 錶示聲明變量ic來記錄ia與ib的和
int ic = ia + ib;
System.out.println("ic = " + ic); // ic = 8
// 其中ia+ib這個整體叫做錶達式 ia、ib叫做操作數 +叫做操作符/運算符
System.out.println(ia + ib); // 8
System.out.println(ia - ib); // 4
System.out.println(ia * ib); // 12
System.out.println(ia / ib); // 3
System.out.println(ia % ib); // 0
System.out.println("----------------------------------------");
// 3.注意事項
// 3.1 當兩個整數相除時結果只保留整數部分,丟弃小數部分
System.out.println(5 / 2); // 2
System.out.println("----------------------------------------");
// 3.2 若希望保留小數部分該如何處理?
// 處理方式一:使用强制類型轉換將其中一個操作數轉換為double類型再運算即可
System.out.println((double)5 / 2); // 2.5
System.out.println(5 / (double)2); // 2.5
System.out.println((double)5 / (double)2); // 2.5
System.out.println((double)(5 / 2)); // 2.0
// 處理方式二:讓其中一個操作數乘以1.0即可(推薦)
System.out.println(5*1.0 / 2); // 2.5
System.out.println(5.0 / 2); // 2.5 ia.0 錯誤的錶示
System.out.println("----------------------------------------");
// 3.3 0不能作除數
//System.out.println(5 / 0); // 編譯ok,運行發生java.lang.ArithmeticException(算術异常 記住): / by zero
System.out.println(5 / 0.0); // Infinity 無窮
System.out.println(0 / 0.0); // NaN Not a Number 
}
}

案例題目

• 提示用戶輸入正整數類型的秒數,拆分秒數後輸出x小時x分x秒。
• 如:輸入7199,輸出1小時59分59秒。
/* 編程使用算術運算符實現秒數的拆分 */
import java.util.Scanner;
public class ArithmeticTimeTest {

public static void main(String[] args) {

// 1.提示用戶輸入一個正整數的秒數並使用變量記錄
System.out.println("請輸入一個正整數的秒數:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
// 2.將正整數的秒數拆分為時分秒後並使用變量記錄
// 3666秒 => 1小時1分鐘6秒鐘
// 3666 / 3600 = 1 小時 3666 % 3600 = 66 / 60 = 1 分鐘 3666 % 60 = 6 秒鐘 
int hour = num / 3600; // 拆分小時數
int min = num % 3600 / 60; // 拆分分鐘數
int sec = num % 60; // 拆分秒數
// 3.打印最終的拆分結果
System.out.println(num + "秒轉換為" + hour + "小時" + min + "分鐘" + sec + "秒鐘");
System.out.println("---------------------------------------------------------------------");
// 4.+既可以作為字符串連接符,又可以作為加法運算符
// 只要+兩邊的操作數中有一個操作數是字符串類型,則該+就被當做字符串連接符處理,否則當做加法運算符處理
System.out.println(hour + min + sec); // 8
System.out.println(hour + min + sec + ""); // 8
System.out.println(hour + min + "" + sec); // 26
System.out.println(hour + "" + min + sec); // 116
System.out.println("" + hour + min + sec); // 116
System.out.println("" + (hour + min + sec));// 8
}
}

1.2、字符串連接運算符

• + 可以實現字符串的連接。同時可以實現字符串與其他數據類型“相連”。

1.3、關系/比較運算符

• > 錶示是否大於運算符 >=錶示是否大於等於運算符
• < 錶示是否小於運算符 <= 錶示是否小於等於運算符
• == 錶示是否等於運算符 != 錶示是否不等於運算符
• 所有以關系運算符作為最終運算的錶達式結果一定是boolean類型。
/* 編程實現關系運算符的使用 */
public class RelationTest {

public static void main(String[] args) {

// 1.聲明兩個int類型的變量並初始化
int ia = 5;
int ib = 2;
// 2.使用變量實現關系運算符的使用並打印結果
boolean b1 = ia > ib;
System.out.println("b1 = " + b1); // b1 = true
System.out.println(ia > ib); // 是否大於 true
System.out.println(ia >= ib); // 是否大於等於 大於或者等於 true
System.out.println(ia < ib); // 是否小於 false
System.out.println(ia <= ib); // 是否小於等於 false
System.out.println(ia == ib); // 是否等於 false
System.out.println(ia != ib); // 是否不等於 true
}
}

案例題目

• 提示用戶輸入一個整數,使用關系運算符判斷該整數是否為負數,
若是 則打印true,若不是則打印false。
/* 編程使用關系運算符實現負數的判斷 */
import java.util.Scanner;
public class RelationJudgeTest {

public static void main(String[] args) {

// 1.提示用戶輸入一個整數並使用變量記錄
System.out.println("請輸入一個整數:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
// 2.判斷該整數是否為負數並打印
boolean b1 = num < 0;
System.out.println("b1 = " + b1);
System.out.println(num < 0);
}
}

1.4、自增减運算符

• ++ 錶示自增運算符,用於使得當前變量自身的數值加1的效果
• -- 錶示自减運算符,用於使得當前變量自身的數值减1的效果
• 只能用於變量,常數不可以
/* 編程實現自增减運算符的使用 */
public class SelfTest {

public static void main(String[] args) {

// 1.聲明一個int類型的變量並初始化
int ia = 10;
// 2.打印變量的數值
System.out.println("ia = " + ia); // ia = 10
System.out.println("---------------------------------------------");
// 3.實現自增减運算符的使用
// 錶示讓變量ia自身的數值加1,並覆蓋該變量原來的數值 
ia++; // ia = ia + 1;
System.out.println("ia = " + ia); // ia = 11
// 錶示讓變量ia自身的數值加1,並覆蓋該變量原來的數值 
++ia;
System.out.println("ia = " + ia); // ia = 12
// 錶示讓變量ia自身的數值减1,並覆蓋該變量原來的數值
--ia;
System.out.println("ia = " + ia); // ia = 11
ia--;
System.out.println("ia = " + ia); // ia = 10
System.out.println("---------------------------------------------");
// 4.簡單的變換
// 其中ia++這個整體叫做錶達式 其中ia叫做操作數/變量 也就是ia++和ia錶示不同的含義,因此所占的內存空間應該不同
// 下面的代碼是在打印錶達式的結果
// 後++錶示先讓變量ia的數值作為整個錶達式的最終結果,然後再讓ia變量自身的數值加1
System.out.println(ia++); // 10
System.out.println("ia = " + ia); // 11
// 前++錶示先讓變量自身的數值加1,然後再讓變量的數值作為整個錶達式的結果
System.out.println(++ia); // 12
System.out.println("ia = " + ia); // 12
System.out.println("---------------------------------------------");
// 5.筆試考點
int ib = ia++;
System.out.println("ib = " + ib); // 12
System.out.println("ia = " + ia); // 13
int ic = ++ia;
System.out.println("ic = " + ic); // 14
System.out.println("ia = " + ia); // 14
// 14 + 16
System.out.println(ia++ + ++ia); // 30
System.out.println("ia = " + ia); // 16
}
}

1.5、邏輯運算符

• && 錶示邏輯與運算符,相當於"並且",同真為真,一假為假。
• || 錶示邏輯或運算符,相當於"或者",一真為真,同假為假。
• ! 錶示邏輯非運算符,相當於"取反",真為假,假為真。
• 邏輯運算符的操作數均為boolean錶達式。

邏輯運算符的圖解

在這裏插入圖片描述

邏輯運算符的短路特性

• 對於邏輯與運算符來說,若第一個錶達式為假則結果為假,此時跳過第 二個錶達式;
• 對於邏輯或運算符來說,若第一個錶達式為真則結果為真,此時跳過第 二個錶達式;
/* 編程實現邏輯運算符的使用 */
public class LogicTest {

public static void main(String[] args) {

// 1.聲明兩個boolean類型的變量並初始化
boolean b1 = true;
boolean b2 = false;
// 2.打印變量的數值
System.out.println("b1 = " + b1); // b1 = true
System.out.println("b2 = " + b2); // b2 = false
System.out.println("---------------------------------------------");
// 3.使用上述變量實現邏輯運算符的使用
boolean b3 = b1 && b2;
System.out.println("b3 = " + b3); // false
System.out.println(b1 && b2); // false 並且
System.out.println(b1 || b2); // true 或者
System.out.println(!b1); // false 取反
System.out.println(!b2); // true
System.out.println("---------------------------------------------");
// 4.測試一下短路特性
int ia = 3;
int ib = 5;
// 對於邏輯與運算符來說,若第一個條件為假則整個錶達式為假,此時跳過第二個錶達式不執行
boolean b4 = (++ia == 3) && (++ib == 5);
System.out.println("b4 = " + b4); // false
System.out.println("ia = " + ia); // 4
System.out.println("ib = " + ib); // 5
// 對於邏輯或運算符來說,若第一個條件為真則整個錶達式為真,此時跳過第二個錶達式不執行
boolean b5 = (++ia == 5) || (++ib == 5);
System.out.println("b5 = " + b5); // true
System.out.println("ia = " + ia); // 5
System.out.println("ib = " + ib); // 5
}
}

案例題目

• 提示用戶輸入一個正整數,使用邏輯運算符判斷該正整數是否為三比特數,
若是則打印true,否則打印false。
/* 編程使用邏輯運算符判斷三比特數 */
import java.util.Scanner;
public class LogicJudgeTest {

public static void main(String[] args) {

// 1.提示用戶輸入一個正整數並使用變量記錄
System.out.println("請輸入一個正整數:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
// 2.使用邏輯運算符判斷是否為三比特數並打印 >= 100 <= 999 &&
//System.out.println(100 <= num <= 999); // 錯誤: 二元運算符 '<=' 的操作數類型錯誤
// 邏輯運算符主要用於連接多個關系運算符作為最終運算的錶達式,用於實現多條件的連接
System.out.println(100 <= num && num <= 999);
// 使用三目運算符來判斷是否為三比特數
System.out.println(num + ((100 <= num && num <= 999)? "是三比特數": "不是三比特數"));
}
}

1.6、條件/三目運算符

• 條件錶達式? 錶達式1: 錶達式2
• 判斷條件錶達式是否成立,若成立則執行錶達式1,否則執行錶達式2 。

案例題目

• 提示用戶輸入兩個整數,使用三目運算符找到最大值並打印出來。
/* 編程使用三目運算符查找最大值 */
import java.util.Scanner;
public class ThreeEyeTest {

public static void main(String[] args) {

// 1.提示用戶輸入兩個整數並使用變量記錄
System.out.println("請輸入兩個整數:");
Scanner sc = new Scanner(System.in);
int ia = sc.nextInt();
int ib = sc.nextInt();
// 2.使用三目運算符找到最大值並打印
int max = ia > ib? ia: ib;
System.out.println("最大值是:" + max);
System.out.println("最大值是:" + (ia > ib? ia: ib));
}
}

1.7、賦值運算符

• = 錶示賦值運算符,用於將=右邊的數據賦值給=左邊的變量,覆蓋變量 原來的數值。
• 賦值錶達式本身也有值,其本身之值即為所賦之值。
• +=、 -=、 *=、 /=、 ...
/* 賦值運算符的使用 */
public class AssignTest {

public static void main(String[] args) {

// 1.聲明一個int類型的變量並初始化
int ia = 3;
// 2.打印變量的數值
System.out.println("ia = " + ia); // ia = 3
System.out.println("-----------------------------------");
// 3.簡單賦值運算符的使用
// 錶示將數據5賦值給變量ia並且覆蓋變量ia原來的數值
ia = 5;
System.out.println("ia = " + ia); // ia = 5
// 下面的代碼是在打印錶達式的結果
System.out.println( ia = 5 ); // 5
System.out.println("ia = " + ia); // ia = 5
int ib = ia = 6;
System.out.println("ia = " + ia); // ia = 6
System.out.println("ib = " + ib); // ib = 6
int ic;
ic = ib = ia = 8;
System.out.println("ia = " + ia); // ia = 8
System.out.println("ib = " + ib); // ib = 8
System.out.println("ic = " + ic); // ic = 8
System.out.println("-----------------------------------");
// 4.複合賦值運算符的使用
//ia = ia + 2; 目前推薦使用該方式
ia += 2; // 簡化寫法,從結果上來看是等價的
System.out.println("ia = " + ia); // ia = 10
System.out.println("-----------------------------------");
// 5.筆試考點1
byte b1 = 10;
System.out.println("b1 = " + b1); // b1 = 10
//b1 = b1 + 2; // 錯誤: 不兼容的類型: 從int轉換到byte可能會有損失 byte + int 相加結果還是int類型
//b1 = b1 + (byte)2; // 錯誤: 不兼容的類型: 從int轉換到byte可能會有損失 byte + byte 相加結果還是int類型 編譯器優化
//b1 = (byte)(b1 + 2); // 强制類型轉換,將int類型轉換為byte
b1 += 2; // 真正等價於b1 = (byte)(b1 + 2);
System.out.println("b1 = " + b1); // b1 = 12
System.out.println("-----------------------------------");
// 6.筆試考點2
//ia == 2; - 錶示判斷變量ia的數值是否等於2
//2 == ia; - 錶示判斷2是否等於變量ia的數值,從結果上來說等價,推薦該方式
//ia = 2; - 錶示將2賦值給變量ia,覆蓋變量ia原來的數值
//2 = ia; //- 編譯報錯 錯誤: 意外的類型
}
}

1.8、移比特運算符(了解)

• << 左移運算符,用於將數據的二進制比特向左移動,右邊使用0補充
• >> 右移運算符,用於將數據的二進制比特向右移動,左邊使用符號比特補充
• >>> 錶示邏輯右移運算符,用於將數據的二進制比特向右移動,左邊使用0 補充。
/* 編程實現移比特運算符的使用 */
public class MoveBitTest {

public static void main(String[] args) {

// 1.聲明一個byte類型的變量並初始化
byte b1 = 13;
// 2.打印變量的數值
System.out.println("b1 = " + b1); // b1 = 13
System.out.println("---------------------------------------------------");
// 3.移比特運算符的使用
// 13的二進制是:... 0000 1101 => 左移1比特的結果是:... 0001 1010 => 換算為十進制整數是:26
//byte b2 = b1 << 1; // 錯誤: 不兼容的類型: 從int轉換到byte可能會有損失 自動提昇為int類型,也就是32比特二進制
byte b2 = (byte)(b1 << 1);
System.out.println("b2 = " + b2); // 26
System.out.println(b1 << 1); // 26 左移1比特相當於當前整數的數值*2
System.out.println(b1 << 2); // 52 左移2比特相當於當前整數的數值*4
System.out.println("---------------------------------------------------");
// 13的二進制是:... 0000 1101 => 右移1比特的結果是:... 0000 0110 => 換算為十進制整數是:6
System.out.println(b1 >> 1); // 6 右移1比特相當於當前整數的數值/2
System.out.println(b1 >> 2); // 3 右移2比特相當於當前整數的數值/4
System.out.println("---------------------------------------------------");
// 邏輯右移 對於非負數來說,邏輯右移和右移的效果一致
System.out.println(b1 >>> 2); // 3 
}
}

1.9、比特運算符(了解)

• & 錶示按比特與運算符,按照二進制比特進行與運算,同1為1,一0為0.
• | 錶示按比特或運算符,按照二進制比特進行或運算,一1為1,同0為0.
• ~ 錶示按比特取反運算符,按照二進制比特進行取反,1為0,0為1.
• ^ 錶示按比特异或運算符,按照二進制比特進行异或運算,同為0,不同為1.
/* 編程實現比特運算符的使用 */
public class BitTest {

public static void main(String[] args) {

// 1.聲明兩個byte類型的變量並初始化
byte b1 = 11;
byte b2 = 13;
// 2.打印變量的數值
System.out.println("b1 = " + b1); // b1 = 11
System.out.println("b2 = " + b2); // b2 = 13
System.out.println("---------------------------------------------------");
// 3.實現比特運算符的使用
// b1的二進制為: 0000 1011 
// b2的二進制為: 0000 1101
System.out.println( b1 & b2); // 按比特與:同1為1,一0為0 按比特與後的二進制為:0000 1001 => 轉為十進制是:9
System.out.println( b1 | b2); // 按比特或:一1為1,同0為0 按比特或後的二進制為:0000 1111 => 轉為十進制是:15
System.out.println( b1 ^ b2); // 按比特异或:相同為0,不同為1 按比特异或的二進制為:0000 0110 => 轉為十進制是:6
System.out.println( ~ b1); // 按比特取反:1為0,0為1 按比特取反的二進制為:1111 0100 
// 二進制1111 0100轉為十進制 => 先减1: 1111 0011 => 按比特取反:0000 1100 => 轉為十進制:12 => 添加負號:-12
}
}

1.10、運算符的優先級

• ()的優先級極高。
• =的優先級極低。
• 若無法確認優先級,則使用()來確保即可。

在這裏插入圖片描述

版权声明:本文为[排骨玉米湯]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201080333035261.html