运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。
案例演示算术运算符的使用
++i先自增后赋值
后++:i++先赋值后运算
/**
* 演示算术运算符的使用
*/
public class ArithmeticOperator {
public static void main(String[] args) {
System.out.println(10/4);//从数学看是2.5,Java中是2
System.out.println(10.0/4);//2.5
double d=10/4;//java中是10/2=4=>2.0
System.out.println(d);//2.0
//%,取模,取余
//在%的本质看一个公式 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;=>i=11
++i;//自增,等价于i=i+1;=>i=12
System.out.println("i="+i);//12
//作为表达式使用
int j=8;
//int k=++j;////等价 j=j+1;k
int k=j++;//等价 k=j;j=j+1;
System.out.println("k="+k+"j="+j);//8 9
}
}
public class ArithmeticOperatorExercise01 {
public static void main(String[] args) {
int i=1;
i=i++;//规则使用临时变量: (1) temp=i;(2) i=i+1;(3)i=temp;
System.out.println(i);
i=i++; //规则使用临时变量: (1) i=i+1;(2) temp=i;(3)i=temp;
System.out.println(i);
//测试输出
int i1=10;
int i2=20;
int a=i1++;
System.out.println("a="+a);//10
System.out.println("i2="+i2);//20
i=--i2;
System.out.println("i="+i);//19
System.out.println("i2="+i2);//19
}
}
用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。
分为两组学习
名称 | 语法 | 特点 |
---|---|---|
短路与&& | 条件 1&&条件 2 | 两个条件都为 true,结果为 true,否则false |
逻辑与& | 条件 1&条件 2 | 两个条件都为 true,结果为 true,否则 false |
名称 | 语法 | 特点 |
---|---|---|
短路或|| | 条件 1||条件2 | 两个条件中只要有一个成立,结果为 true,否则为 false |
逻辑或| | 条件 1|条件2 | 只要有一个条件成立,结果为 true,否则为 false |
名称 | 语法 | 特点 |
---|---|---|
! 非(取反) | !条件 | 如果条件本身成立,结果为 false,否则为 true |
boolean x=true;
boolean y=false;
short z=46;
if((z++==46)&&(y=true)) z++;
if((x=false)||(++z==49)) z++;
System.out.println("z="+z);//50
+= ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理 a += b; [等价 a = a + b; ] a -= b; [等价 a = a-a;]
条件表达式 ? 表达式 1: 表达式2;
运算规则:
口诀: [一灯大师:一真大师]
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是 Scanner
public class Input {
public static void main(String[] args) {
//Scanner 类 表示 简单文本扫描器,在 java.util 包
//1. 引入/导入 Scanner 类所在的包
//2. 创建 Scanner 对象 , new 创建一个对象,体会
// myScanner 就是 Scanner 类的对象
Scanner scanner = new Scanner(System.in);
//3.接收用户输入了, 使用 相关的方法
System.out.println("请输入名字:");
//当程序执行到 next 方法时,会等待用户输入~~~
String name = scanner.next();
System.out.println("请输入年龄:");
int age = scanner.nextInt(); //接收用户输入 int
System.out.println("请输入薪水");
double sal = scanner.nextDouble(); //接收用户输入 double
System.out.println("人的信息如下:");
System.out.println("名字="+name+" 年龄="+age+" 薪水="+sal);
}
}
对于整数,有四种表示方式: 二进制: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 不区分大小写。
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以 16 的(位数-1)次方,然后求和。
案例:请将 0x23A 转成十进制的数
0x23A = 10 * 16^0 + 3 * 16 ^ 1 + 2 * 16^2 = 10 + 48 + 512 = 570
规则:将该数不断除以 2,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将 34 转成二进制 = 0B00100010
规则:将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的八进制。
案例:请将 131 转成八进制 => 0203
规则:将该数不断除以 16,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的十六进制。
案例:请将 237 转成十六进制=> 0xED
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将 ob11010101 转成八进制
ob11(3)010(2)101(5) => 0325
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
案例:请将 ob11010101 转成十六进制
ob1101(D)0101(5) = 0xD5
规则:将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。
案例:请将 0237 转成二进制
02(010)3(011)7(111) = 0b10011111
规则:将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。
案例:请将 0x23B 转成二进制
0x2(0010)3(0011)B(1011) = 0b001000111011
public class BitOperation {
public static void main(String []args) {
int a=1>>2; // 1 向右位移 2 位
int b=-1>>2;//算术右移
int c=1<<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
}
}
>>
:低位溢出,符号位不变,并用符号位补溢出的高位<<
: 符号位不变,低位补 0>>>
逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0