运算符

1、运算符介绍

4、运算符_十进制

2、算术运算符

2.1、介绍

  • 算术运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多

2.2、算术运算符一览

4、运算符_ico_02

4、运算符_ico_03

在 % 的本质看一个公式 a % b = a - a / b * b

public class ArithmeticOperator {
	public static void main(String[] args) {
		//算术运算符的使用

		//  /使用
		System.out.println(10 / 4);
		System.out.println(10.0 / 4);
		double d1 = 10 / 4;
		System.out.println(d1);

		//  %取模,取余
		//	在 % 的本质看一个公式 a % b = a - a / b * b
		// 	-10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
		//  10 % -3 => 10 - 10 / (-3) * (-3) = 10 - 9 = 1
		//	-10 % -3 => -10 - (-10) / (-3) * (-3) = -10 + 9 = -1
		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	11
		++i;	//	i = i + 1	12
		System.out.println(i);

		/*
		作为表达式使用
		前++:++i先自增后赋值
		后++:i++先赋值后自增
		*/
		int a = 20;
		int b = ++a; //a = a + 1; b = a
		System.out.println("a = " + a + ", b = " + b);  // a = 21; b =21

		int c = 20;
		int d = c++; //d = c; c = c + 1;
		System.out.println("c = " + c + ", d = " + d);  // c = 21; d = 20

		int e = 66;
		int f = --e; //e = e - 1; f = e;
		System.out.println("e = " + e + ", f = " + f);	// e = 65; f = 65

		int g = 66;
		int h = g--; //h = g; g = g - 1;
		System.out.println("g = " + g + ", h = " + h);	// g = 65; h = 66
	}
}

4、运算符_十进制_04

2.3、面试题

4、运算符_十六进制_05

public class ArithmeticOperatoreExercise01 {
	public static void main(String[] args) {
		int i = 1;
		i = i++; //使用临时变量temp (1)temp = i; (2)i = i + 1; (3)i = temp;
		System.out.println(i);	// 1

		int j = 1;
		j = ++j; //使用临时变量temp (1)j = j + 1; (2)temp = j; (3)j = temp;
		System.out.println(j);	// 2
	}
}

4、运算符_补码_06

2.4、练习题

4、运算符_ico_07

public class ArithmeticOperatoreExercise02 {
	public static void main(String[] args) {
		int i1 = 10;
		int i2 = 20;
		int i = i1++; // i = i1; i1 = i1 + 1
		System.out.println("i = " + i); // i = 10;
		System.out.println("i1 = " + i1); // i1 = 11;

		i = --i2; // i2 = i2 - 1; i = i2
		System.out.println("i = " + i); // i = 19
		System.out.println("i2 = " + i2); // i2 = 19
	}
}

4、运算符_ico_08

4、运算符_十六进制_09

public class ArithmeticOperatoreExercise03 {
	public static void main(String[] args) {
		//定义一个天数
		int days = 59;
		//定义星期
		int week = 59 / 7;
		//定义天
		int day = 59 % 7;

		System.out.println("还有" + days + "天放假,合" + week + "个星期零" + day + "天");

		//定义一个华式温度
		double temperature = 234.5;
		//摄氏温度
		double centigrade = 5.0 / 9.0 * (temperature - 100);
		System.out.println("华式温度为:" + temperature);
		System.out.println("摄式温度为:" + centigrade);

	}
}

4、运算符_十六进制_10

3、关系运算符(比较运算符)

3.1、介绍

4、运算符_ico_11

3.2、关系运算符一览

4、运算符_ico_12

4、运算符_反码_13

public class RelationalOperator {
	public static void main(String[] args) {
		int a = 9;
		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);
		boolean flag = a > b;
		System.out.println(flag);
	}
}

4、运算符_反码_14

3.3、细节说明

4、运算符_补码_15

4、逻辑运算符

4.1、介绍

4、运算符_十进制_16

4.2、逻辑运算符一览

4、运算符_反码_17

4、运算符_补码_18

4、运算符_十六进制_19

4、运算符_十六进制_20

public class LogicOperator01 {
	public static void main(String[] args) {
		// && 短路与 和 &
		int age = 50;
		if ( age > 30 && age < 90 ) {
			System.out.println("ok1");
		}

		// & 逻辑与
		if ( age > 30 & age < 90 ) {
			System.out.println("ok2");
		}

		// 区别
		int a = 5;
		int b = 20;
		if ( a < 4 && ++b < 15 ) {
			System.out.println("ok3");
		}
		System.out.println("a = " + a + ", b = " + b); //a=5 b=20

		int c = 5;
		int d = 20;
		if ( c < 4 & ++b < 15 ) {
			System.out.println("ok3");
		}
		System.out.println("a = " + a + ", b = " + b); //a=5 b=21
	}
}

4、运算符_反码_21

4、运算符_补码_22

4、运算符_反码_23

public class LogicOperator02 {
	public static void main(String[] args) {
		// || 短路或 和 | 逻辑或
		int age = 50;
		if ( age > 30 || age < 90 ) {
			System.out.println("ok1");
		}

		if ( age > 30 | age < 90 ) {
			System.out.println("ok2");
		}

		// 区别
		int a = 6;
		int b = 10;
		if ( a > 4 || ++b < 20 ) {
			System.out.println("ok3");
		}
		System.out.println("a = " + a + ", b = " + b); // a=6;b=10

		if ( a > 4 | ++b < 20 ) {
			System.out.println("ok4");
		}
		System.out.println("a = " + a + ", b = " + b); // a=6;b=11
	}
}

4、运算符_补码_24

4、运算符_十进制_25

public class InverseOperator {
	public static void main(String[] args) {
		// ! 取反操作
		System.out.println(5 > 2);
		System.out.println(!(5 > 2));

		// a ^ b:逻辑异或
		boolean b = (6 > 4) ^ (9 < 12);
		System.out.println(b);	//false

		boolean b2 = (6 > 4) ^ (9 > 12);
		System.out.println(b2);	//true
	}
}

4、运算符_十六进制_26

4.3、练习题

4、运算符_反码_27

public class LogicOperatorTest {	public static void main(String[] args) {		int x = 5;		int y = 5;		// false & true		if (x++ == 6 & ++y == 6) {			x = 11;		}		System.out.println("x = " + x + ", y = " + y); // x=6;y=6		int a = 5;		int b = 5;		// false && true		if (a++ == 6 && ++b == 6) {			a = 11;		}		System.out.println("a = " + a + ", b = " + b); // a=6;b=5		int c = 5;		int d = 5;		// true | false		if (c++ == 5 | ++d == 5) {			c = 11;		}		System.out.println("c = " + c + ", d = " + d); // c=11;d=6		int e = 5;		int f = 5;		// true || false		if (e++ == 5 || ++f == 5) {			e = 11;		}		System.out.println("e = " + e + ", f = " + f); // e=11;f=5	}}

4、运算符_十六进制_28

4、运算符_补码_29

public class LogicOperatorTest02 {	public static void main(String[] args) {		boolean x = true;		boolean y = false;		short z = 46;		// true && true		if ((z++ == 46) && (y = true)) {			z++; // z = 48;		}		// false || true		if ((x=false) || (++z == 49)) {			z++; // z = 50;		}		System.out.println("z = " + z);	// z = 50	}}

4、运算符_反码_30

5、赋值运算符

5.1、介绍

4、运算符_补码_31

public class AssignOperator {	public static void main(String[] args) {		//赋值运算符的使用		int i = 10;		i += 4; // i = i + 4;		System.out.println("i = " + i);		//复合赋值运算符会进行类型转换		byte b = 3;		b += 4; // 等价于 b = (byte)(b + 4);		b++;	//等价于 b = (byte)(b + 1);		System.out.println("b = " + b);	//8	}}

4、运算符_十六进制_32

6、三元运算符

6.1、基本语法

4、运算符_反码_33

public class TernaryOperator {	public static void main(String[] args) {		//三元运算符使用		int a = 10;		int b = 99;		int result = a > b ? a++ : b--;		System.out.println("result = " + result);	// 99		System.out.println("a = " + a);	// 10		System.out.println("b = " + b); // 98	}}

4、运算符_十六进制_34

6.2、使用细节

4、运算符_十进制_35

public class TernaryOperatorDetail {	public static void main(String[] args) {		//三元运算符细节		int a = 3;		int b = 8;		int result = a > b ? a : b;		System.out.println("result = " + result);	}}

4、运算符_ico_36

6.3、练习

4、运算符_补码_37

public class TernaryOperatorExercise {	public static void main(String[] args) {		//实现三个数的最大值		int a = 5;		int b = 2;		int c = 9;		int result = a > b ? a : b;		int max = c > result ? c : result;		System.out.println("max = " + max);		//优化		//使用一条语句实现		int max1 = (a > b ? a : b) > c ? (a > b ? a : b) : c;		System.out.println("max1 = " + max1);	}} 

4、运算符_反码_38

7、运算符优先级

4、运算符_十六进制_39

4、运算符_补码_40

8、标识符的命名规则和规范

4、运算符_反码_41

4、运算符_十六进制_42

4、运算符_补码_43

9、关键字

4、运算符_补码_44

10、保留字

4、运算符_十进制_45

11、键盘输入语句

11.1、介绍

4、运算符_ico_46

//引入 Scanner类所在的包import java.util.Scanner;public class Input {	public static void main(String[] args) {		//创建 Scanner 对象		Scanner sc = new Scanner(System.in);		System.out.println("请输入姓名:");		//姓名		String name = sc.next();		System.out.println("请输入年龄:");		//年龄		int age = sc.nextInt();		System.out.println("请输入薪水:");		//薪水		double salary = sc.nextDouble();		System.out.println("人的信息如下:");		System.out.println("姓名:" + name);		System.out.println("年龄:" + age);		System.out.println("薪水:" + salary);	}}

4、运算符_ico_47

12、进制

12.1、介绍

4、运算符_ico_48

public class BinaryTest {	public static void main(String[] args) {		//演示四种进制		//二进制 0b		int n1 = 0b1010;		//十进制		int n2 = 1010;		//八进制 0		int n3 = 01010;		//十六进制 0x		int n4 = 0x10101;		System.out.println("n1 = " + n1);		System.out.println("n2 = " + n2);		System.out.println("n3 = " + n3);		System.out.println("n4 = " + n4);	}}

4、运算符_反码_49

12.2、进制的图示

4、运算符_反码_50

4、运算符_补码_51

13、进制的转换

13.1、进制转换的介绍

4、运算符_十六进制_52

13.2、其它进制转十进制

4、运算符_反码_53

13.3、二进制转成十进制示例

4、运算符_十六进制_54

13.4、八进制转成十进制示例

4 * 8^0 + 3 * 8^1 + 2 * 8^2

4、运算符_ico_55

13.5、十六进制转换成十进制示例

A(10) * 16^0 + 3 * 16^1 + 2 * 16^2

4、运算符_十六进制_56

13.6、练习

4、运算符_补码_57

0b110001100 = 1 * 2^2 + 1 * 2^3 + 1 * 2^7 + 1 * 2^8 = 396

02456 = 6 * 8^0 + 5 * 8^1 + 4 * 8^2 + 2 * 8^3 = 1326

0xA45 = 5 * 16^0 + 4 * 16^1 + 10 * 16^2 = 2629

13.7、十进制转其它进制

4、运算符_十六进制_58

13.8、十进制转换成二进制

4、运算符_ico_59

13.9、十进制转换成八进制

4、运算符_补码_60

13.10、十进制转换成十六进制

4、运算符_ico_61

13.11、练习

4、运算符_ico_62

123 => 0b01111011

4、运算符_十进制_63

678 => 01246

4、运算符_十六进制_64

8912 => 0x22D0

4、运算符_补码_65

13.12、二进制转换成八进制、十六进制

4、运算符_ico_66

13.13、二进制转换成八进制

4、运算符_十进制_67

13.14、二进制转换成十六进制

4、运算符_十进制_68

13.15、练习

4、运算符_反码_69

0b11100101 => 0 11 100 101 => 0345

0b1110010110 => 0011 1001 0110 => 0x396

13.16、八进制、十六进制转换成二进制

4、运算符_反码_70

13.17、八进制转换成二进制

4、运算符_补码_71

13.18、十六进制转换成二进制

4、运算符_十六进制_72

13.19、练习

4、运算符_反码_73

01230 => 001 010 011 000 => 001010011000

0xAB29 => 1010 1011 0010 1001 => 1010101100101001

14、位运算的思考题

4、运算符_十六进制_74

public class BitOperator04 {	public static void main(String[] args) {		//右移		// 00000001 => 00000000 => 0		int a = 1 >> 2; // 1 / 2 / 2 = 0;		//算术右移		// 原码 => 10000001		// 反码 => 11111110		// 补码 => 11111111		// 补码算术右移 => 11111111		// 运算后的反码 => 11111110		// 运算后的原码 => 10000001 => -1		int b = -1 >> 2; // -1		//左移		// 00000001 => 00000100 => 4		int c = 1 << 2; // 1 * 2 * 2 = 4		//算术左移		// 10000001 => 10000100 => -4		int d = -1 << 2; // -1 * 2 * 2 = -4		//无符号右移		// 00000011 => 00000000 => 0;		int e = 3 >>> 2; // 3 / 2 / 2 = 0;		System.out.println("a = " + a);		System.out.println("b = " + b);		System.out.println("c = " + c);		System.out.println("d = " + d);		System.out.println("e = " + e);	}}

4、运算符_反码_75

4、运算符_ico_76

public class BitOperator02 {	public static void main(String[] args) {		//按位取反		/*		1.先得到 -5的原码 => 10000000 00000000 00000000 00000101		2.  得到 -5的反码 => 11111111 11111111 11111111 11111010		3.  得到 -5的补码 => 11111111 11111111 11111111 11111011		4.按位取反		  00000000 00000000 00000000 00000100 运算后的补码		  符号位是 0,则为正数,原码,补码,反码相等		5.运算后的原码 => 00000000 00000000 00000000 00000100		结果为 4		*/		System.out.println(~-5);		//按位与		/*		1.先得到 13的补码 => 13的原码 00000000 00000000 00000000 00001101		2.  得到  7的补码 =>  7的原码 00000000 00000000 00000000 00000111		3.按位与		  00000000 00000000 00000000 00000101 运算后的补码		4.运算后的原码 => 00000000 00000000 00000000 00000101		结果为 5		*/		System.out.println(13 & 7);		//按位或		/*		1.先得到 5的补码 => 5的原码 00000000 00000000 00000000 00000101		2.  得到 4的补码 => 4的原码 00000000 00000000 00000000 00000100		3.按位或		  00000000 00000000 00000000 00000101 运算后的补码		4.运算后的原码 => 00000000 00000000 00000000 00000101		结果为 5		*/		System.out.println(5 | 4);		//按位异或		/*		1.先得到 -3的原码 => 10000000 00000000 00000000 00000011		2.  得到 -3的反码 => 11111111 11111111 11111111 11111100		3.  得到 -3的补码 => 11111111 11111111 11111111 11111101		4.  得到  3的补码 => 3的原码 00000000 00000000 00000000 00000011		5.按位异或		  11111111 11111111 11111111 11111110 运算后的补码		6.运算后的反码 => 11111111 11111111 11111111 11111101		7.运算后的原码 => 10000000 00000000 00000000 00000010		结果为 -2		*/		System.out.println(-3 ^ 3);	}}

4、运算符_十六进制_77

15、二进制在运算中的说明

4、运算符_ico_78

16、原码、反码、补码

4、运算符_十进制_79

17、位运算符

4、运算符_十进制_80

public class BitOperator {	public static void main(String[] args) {		//位运算		//按位与		/*		1.先得到 2的补码 => 2的原码 00000000 00000000 00000000 00000010		2.3的补码 => 3的原码 00000000 00000000 00000000 00000011		3.按位与 &		  00000000 00000000 00000000 00000010		  00000000 00000000 00000000 00000011		  00000000 00000000 00000000 00000010 & 运算后的补码		运算后的原码 00000000 00000000 00000000 00000010		结果为2		*/		System.out.println(2 & 3);		//按位取反		/*		1.先得到 -2的原码 => 10000000 00000000 00000000 00000010		    得到 -2的反码 => 11111111 11111111 11111111 11111101		    得到 -2的补码 => 11111111 11111111 11111111 11111110		2.按位取反 ~		  00000000 00000000 00000000 00000001 ~ 运算后的补码		3.运算后的原码 => 00000000 00000000 00000000 00000001		  结果为1		*/		System.out.println(~-2);		//按位取反		/*		1.先得到 2的原码 => 00000000 00000000 00000000 00000010		2.  得到 2的补码 => 00000000 00000000 00000000 00000010		3.按位取反		  11111111 11111111 11111111 11111101 运算后的补码		4.运算后的反码 => 11111111 11111111 11111111 11111100		5.运算后的原码 => 10000000 00000000 00000000 00000011		结果为 -3  		*/		System.out.println(~2);		//按位或		/*		1.先得到 2的补码 => 2的原码 00000000 00000000 00000000 00000010		2.  得到 3的补码 => 3的原码 00000000 00000000 00000000 00000011		3.按位或 |		  00000000 00000000 00000000 00000011 运算后的补码	    4.运算后的原码 => 00000000 00000000 00000000 00000011	    结果为 3		*/		System.out.println(2|3);		//按位异或		/*		1.先得到 2的补码 => 2的原码 00000000 00000000 00000000 00000010		2.  得到 3的补码 => 3的原码 00000000 00000000 00000000 00000011		3.按位异或 ^		  00000000 00000000 00000000 00000001 运算后的补码		4.运算后的原码 => 00000000 00000000 00000000 00000001		结果为 1		*/		System.out.println(2^3);	}}

4、运算符_十六进制_81

4、运算符_反码_82

public class BitOperator03 {	public static void main(String[] args) {		//右移		// 00000001 => 00000000 => 0		System.out.println(1 >> 2); // 1 / 2 / 2 = 0		//左移		// 00000001 => 00000100 => 4		System.out.println(1 << 2);	// 1 * 2 * 2 = 4		//左移		// 00000100 => 00100000 => 32		System.out.println(4 << 3);	// 4 * 2 * 2 * 2 = 32		//右移		// 00001111 => 00000011 => 3		System.out.println(15 >> 2); // 15 / 2 / 2 = 3	}}

4、运算符_ico_83

18、作业

4、运算符_十进制_84

4、运算符_反码_85

4、运算符_补码_86

正数 原码,补码,反码都一样

负数 原码 反码 = 符号位不变,其它位取反 补码 = 反码 + 1

运算都是通过补码 输出结果是原码