天天看點

5-Java運算符

算術運算符

5-Java運算符
/**
 * 示範算術運算符的使用
 */

public class ArithmeticOperator{

	public static void main(String[] args) {
		
		// /的使用
		
		System.out.println(10 / 4); // 2
		System.out.println(10.0 / 4); // 2.5
		// double d = 10 / 4;
		// System.out.println(d); // 2.0
		// % 取模,取餘,負号跟着除數,取模的本質:a % b = a - a /b * b;
		
		System.out.println(10 % 3); //1
		System.out.println(-10 % 3);  // -1
		System.out.println(10 % -3); // 1
		System.out.println(-10 % -3); // -1
		

		// ++ 使用
		int i = 10;
		i++; // 等價于i = i + 1
		++i; // 等價于i = i + 1
		System.out.println("i=" + i);
		
		/*
		作為表達式使用
		前++,++i先自增,後+1
		後++,i++先指派,後+1
		 */
		int j = 8;
		int k = ++j;
		j = 8;
		int l = j++;
		System.out.println("k=" + k + " j=" + j);
		System.out.println("l=" + l + " j=" + j);
		
	}
}
           
  • i=i++ 這種要注意,需要了解Java底層的設定思想,C語言的機制應該是i都等于2
public class ArithmeticOperatorEx01{
	public static void main(String[] args) {
		
		int i = 1;
		i = i++; // 規則使用臨時變量,1、temp = i, 2、i = i + i , 3、i = temp
		System.out.println("i = " + i); //1

		i = 1;
		i = ++i; // i = i+ 1, temp = i, i = temp; 
		System.out.println("i = " + i); // 2

	}
}
           
  • 課堂執行個體
public class ArithmeticOperatorEx01{
	public static void main(String[] args) {
		
		int i = 1;
		i = i++; // 規則使用臨時變量,1、temp = i, 2、i = i + i , 3、i = temp
		System.out.println("i = " + i); //1

		i = 1;
		i = ++i; // i = i+ 1, temp = i, i = temp; 
		System.out.println("i = " + i); // 2

		// 測試輸出,比較簡單
		int i1 = 10;
		int i2 = 20;
		i = i1++;
		System.out.println("i=" + i);
		System.out.println("i2=" + i2);
		i = --i2;
		System.out.println("i=" + i);
		System.out.println("i2=" + i2);

	}
}
           
  • 課堂練習
  1. 假如有59天放假,合多少星期,多少天
  2. 定義一個變量儲存華氏溫度,華氏溫度轉換為攝氏度 5/9*(華氏溫度-100),求華氏溫度對應的攝氏度
// 1
public class ArithmeticOperatorEx02{
	public static void main(String[] args) {
		
		int days = 59;
		int weeks = days / 7;
		int leftDays = days % 7;
		System.out.println(weeks + "星期" + leftDays +"天");

		double f1 = 234.5;
		double c1 = 5.0/9 * (f1 - 100);
		System.out.println("攝氏度為:" + c1);
	}
}
           

關系運算符

  • 關系運算符結果是boolean,要麼是true, 要麼是false
    5-Java運算符
public class RelationalOperator{

	public static void main(String[] args) {
		
		int a = 9; // 開發中不能使用a, b
		int b = 8;

		System.out.println(a > b);
		System.out.println(a >= b);
		System.out.println(a < b);
		System.out.println(a <= b);
		System.out.println(a == b);
		System.out.println(a != b);
		// System.out.println(a instanceof Integer); // instanceof 必須是引用類型,報錯
		boolean flag = a > b;

		System.out.println("flag=" + flag);

	}
}
           

邏輯運算符

5-Java運算符
  • && 和 || 短路與或者短路或,隻要能判斷出來,第二個判斷不會判斷
  • && &, || |, ^異或, !取反
  • && 和 &的差別
/**
 * 示範邏輯運算符的使用
 */

public class LogicOperator{
	public static void main(String[] args) {
		
		// && 和 || 案例示範
		// && 兩個都為真,才為真,&&和&差別是&&隻要判斷為假就不在進行判斷
		int age = 50;
		if (age > 20 && age < 90){
			System.out.println("ok100");
		}


		if (age > 20 && age < 30){
			System.out.println("ok100");
		}
		// &的使用,
		if (age > 20 & age < 90){
			System.out.println("ok100");
		}

		//差別,&&和&差別是&&隻要判斷為假就不在進行判斷
		int a = 4;
		int b = 9;

		if (a <1 && ++b < 50){
			System.out.println("ok300");
		}

		System.out.println("a=" + a + " b=" + b);
		// 
		if (a <1 & ++b < 50){
			System.out.println("ok300");
		}
		System.out.println("a=" + a + " b=" + b);
	}
}
           
  • || 和 |的差別
public class LogicOperator02{

	public static void main(String[] args) {
		
		// || 短路或和 |的差別,短路或||隻要判斷為真就不在進行判斷
		int age = 50;
		if (age > 20 || age < 30){
			System.out.println("ok100");
		}

		age = 50;
		if (age > 20 | age < 30){
			System.out.println("ok200");
		}

		// 看看差別
		int a = 4;
		int b = 9;

		if (a > 1 || ++b < 50){
			System.out.println("ok300");
		}
		System.out.println("a=" + a + " b=" + b);
		// |
		if (a > 1 | ++b < 50){
			System.out.println("ok300");
		}
		System.out.println("a=" + a + " b=" + b);


	}
}
           
  • !取反
public class LogicOperator03{

	public static void main(String[] args) {
		
		System.out.println(60 > 20);
		System.out.println(!(60 > 20));

		// ^ 異或,不同為真,相同為假
		boolean b = (10 > 1) ^ (3 < 5);
		System.out.println("b=" + b);

		boolean a = (10 > 1) ^ (3 > 5);
		System.out.println("a=" + a);

	}
}
           

指派運算符

  • 指派運算符就是将某個運算後的值,賦給指定的變量
  • 複合運算符會自動進行類型轉換;
// 示範運算符的使用
public class AssignOperator{

	public static void main(String[] args) {
		
		int n1 = 10;
		n1 += 4; // n1 = n1 + 4;
		System.out.println("n1=" + n1);

		n1 /= 3;
		System.out.println("n1=" + n1);

		// 複合運算符會自動進行類型轉換
		byte b = 3;
		b += 2; // b =(byte) (b + 2);
		//b = b + 2; // 會報錯,類型強制轉換
		b++; // b = (byte)(b + 1)

	}
}
           

位運算符

  • 運算符優先級
    5-Java運算符
  • 辨別符指令規則
  • 數字不能開頭,隻能有26個英文字元大小寫,以及_,以及$組成
  • 不能由關鍵字或者保留字組成
  • 辨別符命名規範
    5-Java運算符
import java.util.Scanner;

// 掃描器

public class Input{

	public static void main(String[] args) {
		// 示範接受使用者的輸入
		// 步驟
		// 1.引入Scanner的包
		// 2.建立Scanner對象
		// 3.接受使用者的輸入
		
		Scanner myScanner = new Scanner(System.in);
		System.out.println("請輸入名字");
		String name = myScanner.next();
		System.out.println("請輸入年齡:");
		int age = myScanner.nextInt();
		System.out.println("請輸入薪水:");
		double sal = myScanner.nextDouble();
		System.out.println("人的資訊如下:");

		System.out.println("name=" + name + " age=" + age + " sal=" + sal);


	}
}
           
  • 進制
// 示範四種進制
// 
public class BinaryTest{
	public static void main(String[] args) {
		// n1 二進制
		int n1 = 0b1010;
		// n2 10進制 
		int n2 = 1010;
		// n3 8進制
		int n3 = 01010;
		// n4 16進制
		int n4 = 0x1010;

		System.out.println("n1=" + n1);
		System.out.println("n2=" + n2);
		System.out.println("n3=" + n3);
		System.out.println("n4=" + n4);

	}
}
           
  • 位運算的思考題
    5-Java運算符
  • 計算機運算的時候,都是以補碼的方式來運算的(所有運算包括位運算)
  • 當我們看運算結果的時候,要看他的原碼
// 位運算
// 

public class BitOperator{

	public static void main(String[] args) {
		
		// 看老師的推導過程
		// 1.先得到2的補碼,==> 2的補碼 00000000 00000000 00000000 00000010
		//                     3的補碼 00000000 00000000 00000000 00000011
		//                      的補碼 00000000 00000000 00000000 00000010                    
		System.out.println(2&3);  


		// 推導
		// 1. 先得到 -2 的原碼 10000000 00000000 00000000 00000010
		// 				 反碼 11111111 11111111 11111111 11111101
		// 				 補碼 11111111 11111111 11111111 11111110
		// ~-2的操作          00000000 00000000 00000000 00000001
		//運算後的原碼
		System.out.println(~-2);   
		// 推導
		// 1.得到2的補碼 00000000 00000000 00000000 00000010
		// 2. ~2操作    11111111 11111111 11111111 11111101
		//              11111111 11111111 11111111 11111100
		//              10000000 00000000 00000000 00000011
		System.out.println(~2);
		             			 
	}
}
           
  • 左移 << 相當于*2
  • 右移 >> 相當于/2
public class BitOperator02{

	public static void main(String[] args) {
		
		System.out.println("12 >> 2  " + (12 >> 2));
		System.out.println("12 << 2  " + (12 << 2));

	}
}
           

三元運算符

  • 基本文法:條件表達式?表達式1:表達式2;
  • 細節:表達式1和表達式2要為可以賦給接受變量的類型(或者可以自動轉換)
// 三元運算符細節

public class TemaryOperatorDetail{

	public static void main(String[] args) {
		
		// 表達式1和表達式2要為可以賦給接受變量的類型(或者可以自動轉換)
		int a = 3;
		int b = 8;
		int c = a > b ? a : b;
		// int c = a > b ? 1.1 : 3.4; // 報錯
		double d = a > b ? a : b;


	}
}
           
public class TemaryOperatorEx01{

	public static void main(String[] args) {
		// 實作三個數的最大值,用三元運算符
		int n1 = 55;
		int n2 = 33;
		int n3 = 123;
		// 思路
		// 1.先得到n1和n2中的最大數,儲存到max1
		// 2.然後在求出max1和 n3 中的最大數,儲存到n2
		int max1 = n1 > n2 ? n1 : n2;
		int max2 = max1 > n3 ? max1 : n3;

		System.out.println("max最大數:" + max2);

		// 使用一條語句實作,其實就是拆解,大問題先拆成小問題,然後在解決
		int max = (n1 > n2 ? n1 : n2) > n3 ? (n1 > n2 ? n1 : n2) : n3;
		


	}
}