Java运输符
一、算术运算符
① +(加号):在java中有三种作用,代表正号,做加法运算,字符串的连接符
② -(减号):在java中有两种作用,代表负号,做减法运算
③ *(乘号):代表做乘法运算
④ /(除号):代表做除法运算
⑤ %(求余):代表做求余运算
⑥ ++(自增):代表做自增运算
⑦ –(自减):代表做自减运算
整数相除只能得到整数,如果想得到小数,必须把数据转化为浮点数类型
/获取的是除法操作的商,%获取的是除法操作的余数
%运算符
1.当左边的绝对值小于右边绝对值时,结果是左边
2.当左边的绝对值等于右边或者是右边的倍数时,结果是0
3.当左边的绝对值大于右边绝对值时,结果是余数
4.%运算符结果的符号只和左边有关系,与右边无关

++、–运算符——代表+1或-1操作
单独使用:放在操作数的前面和后面效果一样
参与表达式运算使用:放在操作数前面,先自增或自减,然后再参与运算
放在操作数后面,先参与运算,然后再自增或自减

二、赋值运算符
①. 基本的赋值运算符:=(把=右边的的数据赋值给左边)
②. 扩展的赋值运算符:+=、-=、*=、/=、%=(把左边和右边做加减乘除运算后,赋值给左边)
sum+ = i; ==> sum = sum + i;
三、比较运算符
= =, !=, >, >=, <, <=
无论操作简单还是复杂,结果都是boolean类型 "=="不能写成"="
四、逻辑运算符
//逻辑运算符
int x = 10;
int y = 20;
int z = 30;
//x<y<z
//&(逻辑与)——只要&左右两边的操作元有一个结果为false的话,最终&运算的结果为false
System.out.println(x < y & y < z); //true & true=true
System.out.println(x > y & y < z); //false & true=false
System.out.println(x < y & y > z); //true & false=false
System.out.println(x > y & y > z); //false & false=false
//|(逻辑或)——只要|左右两边的操作元有一个结果为true的话,最终|运算的结果为true
System.out.println(x < y | y < z); //true | true=true
System.out.println(x > y | y < z); //false | true=false
System.out.println(x < y | y > z); //true | false=false
System.out.println(x > y | y > z); //false | false=false
//!(逻辑非)
System.out.println(true);
System.out.println(!true);
System.out.println(!!true);
//&&(短路与)//若左边为false则不执行右边
System.out.println(x < y && y < z); //true && true=true
System.out.println(x > y && y < z); //false && true=false
System.out.println(x < y && y > z); //true && false=false
System.out.println(x > y && y > z); //false && false=false
//& 与 && 的区别
int i = 3;
int j = 4;
System.out.println((++i == 3)&(++j == 4));//false&false=false
System.out.println("i的值"+i);//4
System.out.println("j的值"+j);//5
i = 3;
j = 4;
//&&如果左边的操作元结果为false,右边的操作元将不再判断
System.out.println((++i == 3)&&(++j == 4));//false&false=false
System.out.println("i的值"+i);//4
System.out.println("j的值"+j);//4
i = 3;
j = 4;
//&&如果左边的操作元结果为true,右边的操作元再判断
System.out.println((++i!=3)&&(++j==4)); //true&&false=false
System.out.println("i的值"+i);//4
System.out.println("j的值"+j);//5
i = 3;
j = 4;
System.out.println((i++==3)|(++j==4)); //true|false=true
System.out.println("i的值"+i);//4
System.out.println("j的值"+j);//5
i = 3;
j = 4;
//左边操作元为true,右边操作元不作判断
System.out.println((i++==3)||(++j==4)); //true|false=true
System.out.println("i的值"+i);//4
System.out.println("j的值"+j);//4
五、位运算符
//位运算符
//&(按位与)--当有0结果0
System.out.println(6&3); //2
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原反补码)
//-------------------------------------
// 00000000 00000000 00000000 00000010 //2
System.out.println(6&(-3)); //4
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 10000000 00000000 00000000 00000011 (-3的2进制原码)
// 11111111 11111111 11111111 11111100 (-3的2进制反码)
// 11111111 11111111 11111111 11111101 (-3的2进制补码)
//-------------------------------------
// 00000000 00000000 00000000 00000100 (补码,符号位为0,原码相同) //4
//|(按位或)--有1为1
System.out.println(6|3);//7
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原码)
//------------------------------------
// 00000000 00000000 00000000 00000111 //7
System.out.println(6|(-3));//-1
//00000000 00000000 00000000 00000110(6原反补码)
//10000000 00000000 00000000 00000011(-3原码)
//11111111 11111111 11111111 11111100(-3反码)
//11111111 11111111 11111111 11111101(-3补码)
//-----------------------------------
//11111111 11111111 11111111 11111111(补码)
//11111111 11111111 11111111 11111110(反码)
//10000000 00000000 00000000 00000001(原码)// -1
//^(按位异或)--相同为0,不同为1
System.out.println(6^3); //5
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原码)
//------------------------------------
// 00000000 00000000 00000000 00000101 //5
System.out.println(6^(-3)); //-5
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 10000000 00000000 00000000 00000011 (-3的2进制原码)
// 11111111 11111111 11111111 11111100(-3反码)
// 11111111 11111111 11111111 11111101(-3补码)
//------------------------------------
// 11111111 11111111 11111111 11111011(补码)
// 11111111 11111111 11111111 11111010(反码)
// 10000000 00000000 00000000 00000101(原码)
System.out.println(6^3^6); //3 //a^b^a = b
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原码)
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
//------------------------------------
// 00000000 00000000 00000000 00000011
System.out.println(6^3^3); //6
//~(按位取反) -- 所有位数全部取反
//正数(包括0)按位取法-- 对应绝对值+1的负数
System.out.println(~6); //-7
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 10000000 00000000 00000000 00000111(-7原码)
// 11111111 11111111 11111111 11111000(-7反码)
// 11111111 11111111 11111111 11111001(-7补码)
System.out.println(~7);//-8
// 00000000 00000000 00000000 00000111
// 11111111 11111111 11111111 11111000 补
// 11111111 11111111 11111111 11110111 反
// 00000000 00000000 00000000 00001000 原
System.out.println(~8);//-9
System.out.println(~9);//-10
//负数按位取反 -- 对应绝对值-1的正数
System.out.println(~(-6)); //5
System.out.println(~(-7)); //6
System.out.println(~(-8)); //7
System.out.println(~(-9)); //8
System.out.println(~1); //-2
System.out.println(~0); //-1
System.out.println(~(-1)); //0
//<<(左移)向左移动几位乘以2的几次幂 ---左位丢掉最高位,正负数都是右边补0
System.out.println(12<<1); //24
// 00000000 00000000 00000000 00001100 (12原反补)
//(0) 00000000 00000000 00000000 00011000 (24)
System.out.println(12<<2); //48
//快速计算10*8
System.out.println(10<<3);
System.out.println(-12<<1); //-24
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11101000 左移
// 11111111 11111111 11111111 11100111 反
// 10000000 00000000 00000000 00011000 原
System.out.println(-12<<2); //-48
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11010000 左移
// 11111111 11111111 11111111 11001111 反
// 10000000 00000000 00000000 00110000 补
//>>(右移)向右移动几位除以2的几次幂--右移,正数左边补0,负数左边补1
System.out.println(12>>1); //6
// 00000000 00000000 00000000 00001100 (12原反补)
// 00000000 00000000 00000000 00000110 (0) 6
System.out.println(12>>2); //3
// 00000000 00000000 00000000 00001100 (12原反补)
// 00000000 00000000 00000000 00000011 (00) 3
System.out.println(-12>>1); //-6
System.out.println(-12>>2); //-3
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11111101 右移结果
// 11111111 11111111 11111111 11111100 反
// 10000000 00000000 00000000 00000011 原
System.out.println(-12>>4); //-1
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11111111 右移结果
// 11111111 11111111 11111111 11111110 反
// 10000000 00000000 00000000 00000001 原
//>>>(无符号位右移) -- 无论正负左边都补0
System.out.println(12>>>2);//3
System.out.println(-12>>>2);//1073741821
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 00111111 11111111 11111111 11111101 右移结果
六、三目运算符
(关系表达式) ? 表达式1 : 表达式2;
判断表达式是否成立,成立执行表达式1,不成立则执行表达式2
1 | //找出最大值 |