一、运算符
在java中用于程序计算的操作i发统称为运算符,运算符分为如下几类:
1、算术运算符
算术运算符 | 说明 | |
---|---|---|
+ | 加号两边是数值,可以运算,如果一边存在字符串,则当作连接符 | a+b |
- | 两个数相减,减号也可以当作负数 | a-b -a |
* | 两个数相乘,其中*不能省略 | a*b |
/ | 两个数相除,必须保证数据类型一致,其中除数不能为0,否则出现算术错误 | a/b |
% | 对一个数取余 | a%b |
++ | 对一个数自增 | i++ |
-- | 对一个数自减 | i-- |
8
// + - * / % 所有运算符在计算时要保证数据类型一致
int num1=100;
int num2=200;
int sum=num1+num2;
int nul=num1-num2;
int num3=-num2; //-200
System.out.println("两个数相加:"+sum); //+ 表示连接符
System.out.println("两个数相减:"+nul);
System.out.println("num2:"+num2+",num3:"+num3);
// System.out.println("num+num2:"+(num1+num2));
int sum2=num1*num2;
int sum3=num1/num2;
System.out.println(sum3); // 0
System.out.println(num1/sum3); //算术异常ArithmeticException
//取模
System.out.println(10%2); //0
System.out.println(1%5); //1 小的数取模大的数是其本身
}
//自加 自减 ++ -- 只能对整数进行
int i=1;
i++; // i=i+1;
System.out.println("i:"+i);
int j=1;
++j; //j=j+1;
System.out.println("j:"+j);
int a=1;
int sum=a++; //先将a+de赋值给sum,a在自加1
int sum2=++a; //先将a自加1,再将自加后的值赋值给sum2
System.out.println("sum:"+sum);
System.out.println("sum2:"+sum2);
System.out.println("a:"+a); // 3
int sum3=a++ + a++;
System.out.println("sum3:"+sum3);
System.out.println("a:"+a);
int b=1;
int s1=b--; // b=b-1 s1的值为 b先赋值 再自减
int s2=--b; //b=b-1 s2的值为 b先自减 再赋值
System.out.println("b:"+b);
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
// ++ -- 综合
int x=1;
int y=2;
int s3 = x++ + --x *(y-- + ++x);//1+1*4
System.out.println("s3:"+s3);
System.out.println("x:"+x);
System.out.println("y:"+y);
2、比较运算符
用于比较两个表达式之间的结果 结果返回true 或 false
比较运算符 | 说明 | |
---|---|---|
> | 比较左边是否大于右边的数,如果大于返回true,否则返回false | |
< | 比较左边是否小于右边的数,如果小于返回true,否则返回false | |
>= | 比较左边是否大于等于右边的数,如果大于等于返回true,否则返回false | |
<= | 比较左边是否小于等于右边的数,如果小于等于返回true,否则返回false | |
== | 比较左边是否相等右边的数,如果相等返回true,否则返回false,对于基本数据类型比较数值是否相等,对于引用数据类型比较 它们的地址是否相同(比较地址就是比较他们存储的内存地方) | |
!= | 比较左边是否不等于右边的数,如果不等于返回true,否则返回false |
//自加 自减 ++ -- 只能对整数进行
int i=1;
i++; // i=i+1;
System.out.println("i:"+i);
int j=1;
++j; //j=j+1;
System.out.println("j:"+j);
int a=1;
int sum=a++; //先将a+de赋值给sum,a在自加1
int sum2=++a; //先将a自加1,再将自加后的值赋值给sum2
System.out.println("sum:"+sum);
System.out.println("sum2:"+sum2);
System.out.println("a:"+a); // 3
int sum3=a++ + a++;
System.out.println("sum3:"+sum3);
System.out.println("a:"+a);
int b=1;
int s1=b--; // b=b-1 s1的值为 b先赋值 再自减
int s2=--b; //b=b-1 s2的值为 b先自减 再赋值
System.out.println("b:"+b);
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
// ++ -- 综合
int x=1;
int y=2;
int s3 = x++ + --x *(y-- + ++x);//1+1*4
System.out.println("s3:"+s3);
System.out.println("x:"+x);
System.out.println("y:"+y);
3、赋值运算符
将表达式的结果 赋值给一个变量,只能赋值给变量 不能赋值给常量
例如 a=3
赋值运算符 | 说明 | 案例 |
---|---|---|
= | 将=右边的结果 赋值给左边的变量 | int a=2 把2赋值给a |
+= | 计算后的赋值,将+=右边的结果赋值给左边的变量 | a+=2 等价于a=a+2 |
-= | 计算后的赋值,将-=右边的结果赋值给左边的变量 | a-=b 等价于a=a-b |
*= | 计算后的赋值,将*=右边的结果赋值给左边的变量 | a**=b 等价于a=a * b |
/= | 计算后的赋值,将/=右边的结果赋值给左边的变量 | a/=b 等价于a=a/b b不等于0 |
&= | 计算后的赋值,将%=右边的结果赋值给左边的变量 | a%=b 等价于a=a%b b不等于0 |
//赋值运算符 = += -= *= /= %=
int a=2;
a+=2;
System.out.println(a);//a
a-=3;
System.out.println(a);//1
a*=2;
System.out.println(a);//2
a/=4;
System.out.println(a);//0
a+=a-=3; // a+=(a-=3)
System.out.println("a="+a);
int x=2;
x+=x-=x*=x++;
//x = x +(x = x -(x = x *(x++)))
//x=2+(x=2-(x=2*2))
//x=2+(2-4)=0
System.out.println("x="+x);
//赋值运算符优先级最di 从右往左计算
int z=1;
int y=1;
z+=(z++) + (z--) +(y-=z++);
System.out.println(z); //4
System.out.println(y); //0
}
4、逻辑运算符
在Java中用于两个或两个以上的表达式,取逻辑判断的结果 通常需要使用逻辑运算符
逻辑运算符 | 说明 | |
---|---|---|
& | 逻辑与,左右两边可以连接表达式,两个表达式都成立时,整个结果为true | true&true true&false,flase&true flase&flase |
| | 逻辑或,左右两边可以连接表达式,两个表达式任意一个成立时,整个结果为true | true|true true|false,flase|true flase|flase |
! | 逻辑非,对表达式取反 | !flase !true |
&& | 短路与,与&类似,短路 特点 符号左边为false,右边不再计算 | |
|| | 短路或,与|类似,短路 特点 符号左边为true,右边不再计算 |
//逻辑运算符
System.out.println(true&true); //true
System.out.println(true&false);
System.out.println(false&true);
System.out.println(false&false);
//true%true
System.out.println(1>0 & 3>1);
System.out.println(1>0 && 3>1);
//
System.out.println(true|true);
System.out.println(true|false);
System.out.println(false|true);
System.out.println(false|false); //false
// \ 短路或
System.out.println(true||false);
//取反
System.out.println(!true);
System.out.println(!false);
总结:&与&&的区别 |与||的区别?
回答: 1、&对于符号两边的表达式都会执行 &&符号左边为false,则右边不执行
|对于符号两边的表达式都会执行 ||符号左边为true,则右边不执行
2、&、|两边可以直接写数字,按位计算,短路符号 不能直接计算
// && 与 & 的区别
int a=1;
int b=2;
System.out.println(a>b && b++>0);
System.out.println("b:"+b);
// System.out.println(a>b & b++>0);
// System.out.println("b:"+b);
// \ 与 的区别
System.out.println(a>=1 || a++<0);// a++不执行
System.out.println("a:"+a);
System.out.println(a>=1 | a++<0);
System.out.println("再次输出a:" +a);
//另外一个区别 & 两边可以是数值,但是短路符号不可以
十进制 | 转换 |
---|---|
1 | 1*2的0次方 |
2 | 1*2的1次方 |
4 | 1*2的2次方 |
...... | 对于2的倍数,1*2的n次方 转成二进制位1后面n个0 |
64 | 1*2的6次方 |
队医任意十进制转二进制,先查找比他晓的且离他最近的2的倍数,然后差值再进行二进制转换(拆分发)
例如 96=64=32=1100000
二进制转十进制
公式 从个位开始,每个位上的数,乘以2的n次方 之和
System.out.println(4&5); //将结果转成二进制
System.out.println(4|5);
// 4的二进制 100
// 5的二进制 101
// & 4 100
// | 5 101
//十进制转二进制
//1——》2的0次方 1
//2——》2的1次方 10
//4——》2的2次方 100
//以此类推
//64——》2的6次方 1000000
5、位运算符
移位运算符 | 说明 | 案例 |
---|---|---|
< < | 左移:将一个数转成二进制之后,整体往左移动n位,扩大倍数,一个属向左移动n位,结果为这个数乘以2的n次方 | 3<<2等价于9*2的2次方 |
> > | 右移:将一个数转成二进制之后,整体往右移动n位,缩小倍数,一个属向右移动n位,结果为这个数除乘以2的n次方(除不尽单独考虑) | 8>>2等价于8/2的2次方 |
> > > | 无符号的右移,不考虑符号位,将这个数整体往右移动 | |
^ n | 异或 | |
- n | 数值取反 |
//正整数的移位 << >> >>>
System.out.println(3<<2);//3*2^2=12
System.out.println(7<<3);//7*2^3=56
//对于正数的无符号右移和 右移结果一样
System.out.println(16>>2);//4
System.out.println(18>>2);//4
System.out.println(5^9); //12
System.out.println(3>>2);//0
System.out.println(3>>>2);//0
//负数的移位
//负数的移位还是负数
System.out.println(-4<<2); //-4*2的2次方=-16
//-16无符号右移2位
System.out.println(-16>>>2);
// 由于不考虑符号,移动后高位全补0变成正数
// 正数的原码和补码一致 这个数即为所得
// 取反
System.out.println( ~5);
//0000。。00000101
//1111.。11111010 取反后成了负数 继续还原
//1000.。00000101 +1 还原后加1
//1000.。00000110 = -6
6、三目运算符
判断式?结果1:结果2;
public static void main(String[] args) {
System.out.println(Math.random());
//生成100以内的随机数
int n=(int)(Math.random()*100);
System.out.println("n:"+n);
System.out.println(n%2==0?"这个数是偶数":"这个数是奇数");
}
二、表达式 语句块
表达式
通过运算符和操作数组成的元素,表达式不能单独在程序中,需要接受或者输出
注意:这里的()表示方法的括号、点号表述小数点、【】表示数组的下限
2-5:用于得到结果的值
6-12:用于运输算得到true、false
13.14:是赋值 赋值的优先级最低
语句块
public static void main(String[] args) {
//定义一个方法中的代码块
{
//局部变量只能使用再它所在的区域
int a=1;
a++;
System.out.println("这是一个方法里面的代码块"+a);
}
//a++;
if (true){
System.out.println("这是一个if的语句块");
}
}