1、运算符介绍
2、算术运算符
2.1、介绍
- 算术运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多
2.2、算术运算符一览
在 % 的本质看一个公式 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
}
}
2.3、面试题
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
}
}
2.4、练习题
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
}
}
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);
}
}
3、关系运算符(比较运算符)
3.1、介绍
3.2、关系运算符一览
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);
}
}
3.3、细节说明
4、逻辑运算符
4.1、介绍
4.2、逻辑运算符一览
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
}
}
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
}
}
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.3、练习题
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 }}
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 }}
5、赋值运算符
5.1、介绍
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 }}
6、三元运算符
6.1、基本语法
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 }}
6.2、使用细节
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); }}
6.3、练习
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); }}
7、运算符优先级
8、标识符的命名规则和规范
9、关键字
10、保留字
11、键盘输入语句
11.1、介绍
//引入 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); }}
12、进制
12.1、介绍
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); }}
12.2、进制的图示
13、进制的转换
13.1、进制转换的介绍
13.2、其它进制转十进制
13.3、二进制转成十进制示例
13.4、八进制转成十进制示例
4 * 8^0 + 3 * 8^1 + 2 * 8^2
13.5、十六进制转换成十进制示例
A(10) * 16^0 + 3 * 16^1 + 2 * 16^2
13.6、练习
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、十进制转其它进制
13.8、十进制转换成二进制
13.9、十进制转换成八进制
13.10、十进制转换成十六进制
13.11、练习
123 => 0b01111011
678 => 01246
8912 => 0x22D0
13.12、二进制转换成八进制、十六进制
13.13、二进制转换成八进制
13.14、二进制转换成十六进制
13.15、练习
0b11100101 => 0 11 100 101 => 0345
0b1110010110 => 0011 1001 0110 => 0x396
13.16、八进制、十六进制转换成二进制
13.17、八进制转换成二进制
13.18、十六进制转换成二进制
13.19、练习
01230 => 001 010 011 000 => 001010011000
0xAB29 => 1010 1011 0010 1001 => 1010101100101001
14、位运算的思考题
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); }}
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); }}
15、二进制在运算中的说明
16、原码、反码、补码
17、位运算符
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); }}
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 }}
18、作业
正数 原码,补码,反码都一样
负数 原码 反码 = 符号位不变,其它位取反 补码 = 反码 + 1
运算都是通过补码 输出结果是原码