1 int a = 3; 2 int b; 3 b = a++; 4 c = ++a; 5 System.out.println("a = "+a); 6 System.out.println("b = "+b); 7 System.out.println("c = "+c);
1 byte b = 10; 2 b++; //运算符,底层还会自动转换类型,相当于b = (byte)(b + 1) 3 b = b + 1;//int转换byte可能会损失精度(运算时,类型转换为int,而b是byte类型) 4 System.out.println(b);
1 short s1 = 1; 2 s = s + 1; //类型错误,高类型向低类型转换 3 short s1 = 1; 4 s += 1; //2
1 int a = 10;int b = 15; 2 //System.out.println((++a == 10) & (++b == 15)); 3 //System.out.println(a); //11 4 //System.out.println(b); //16 5 System.out.println((++a == 10) && (++b == 15)); 6 System.out.println(a); //11 7 System.out.println(b); //15
int a = 10;int b = 15; System.out.println((++a == 11) | (++b == 15)); System.out.println(a); //11 System.out.println(b); //16 //System.out.println((++a == 11) || (++b == 15)); //System.out.println(a); //11 //System.out.println(b); //15
1 class Demo_Operator { 2 public static void main(String[] args) { 3 //&、|、^、! 4 //0<x<1 5 //x>0 & x<1;//&:逻辑与、并且、and 6 int a,b,c; 7 a = 10; 8 b = 15; 9 c = 20; 10 System.out.println("a < b & b < c结果为:" + (a < b & b < c)); //true & true = true 11 System.out.println("a < b & b > c结果为:" + (a < b & b > c)); //true & false = false 12 System.out.println("a > b & b < c结果为:" + (a > b & b < c)); //false & true = false 13 System.out.println("a > b & b > c结果为:" + (a > b & b > c)); // false & false = false 14 //&:只有两边同时为true时,结果方为true; 15 System.out.println("a < b && b < c结果为:" + (a < b && b < c)); //true & true = true 16 System.out.println("a < b && b > c结果为:" + (a < b && b > c)); //true & false = false 17 System.out.println("a > b && b < c结果为:" + (a > b && b < c)); //false & true = false 18 System.out.println("a > b && b > c结果为:" + (a > b && b > c)); // false & false = false 19 //&&:只有两边同时为true时,结果方为true;遇到false,下面的不执行 20 System.out.println("a < b | b < c结果为:" + (a < b | b < c)); //true & true = true 21 System.out.println("a < b | b > c结果为:" + (a < b | b > c)); //true & false = true 22 System.out.println("a > b | b < c结果为:" + (a > b | b < c)); //false & true = true 23 System.out.println("a > b | b > c结果为:" + (a > b | b > c)); // false & false = false 24 //|:只有两边同时为false时,结果才为false; 25 System.out.println("a < b ^ b < c结果为:" + (a < b ^ b < c)); //true & true = false 26 System.out.println("a < b ^ b > c结果为:" + (a < b ^ b > c)); //true & false = true 27 System.out.println("a > b ^ b < c结果为:" + (a > b ^ b < c)); //false & true = true 28 System.out.println("a > b ^ b > c结果为:" + (a > b ^ b > c)); // false & false = false 29 //^:两边相同为false,两边不同为true 30 System.out.println("!true结果为:"+(!true)); // false 31 System.out.println("!false结果为:"+(!false)); // true 32 33 } 34 }
1 class Demo_Opertor1 { 2 public static void main(String[] args) { 3 /* 4 位运算符 5 &、|、^、~ 6 &:有0则0 7 |:有1则1 8 ^:相同则0,不同则1 9 ~:按位取反 10 */ 11 System.out.println(6 & 3); //2 12 //将6转换为二进制:110;3转换为二进制:011 13 //有0则0 14 /* 15 110 16 & 011 17 ----------- 18 010 19 */ 20 System.out.println(6 | 3); //7 21 //将6转换为二进制:110;3转换为二进制:011 22 //有1则 23 /* 24 110 25 | 011 26 ----------- 27 111 28 */ 29 System.out.println(6 ^ 3); //5 30 //将6转换为二进制:110;3转换为二进制:011 31 //相同则0,不同则1 32 /* 33 110 34 ^ 011 35 ----------- 36 101 37 */ 38 System.out.println(~6); //-7 39 //将6转换为二进制:110;3转换为二进制:011 40 //按位取反 41 /* 42 ~ 00000000 00000000 00000000 00000110 43 11111111 11111111 11111111 11111001 取反(负数补码) 44 -1 00000000 00000000 00000000 00000001 45 ------------------------------------------------------ 46 11111111 11111111 11111111 11111000 反码 (高位不变,其他位取反) 47 10000000 00000000 00000000 00000111 -7 48 */ 49 System.out.println(4 ^ 5 ^ 5); //4 一个数被另一个数异或两次,该数本身不变。 50 } 51 }
1 class Demo_opertor { 2 public static void main(String[] args) { 3 int a = 10; 4 int b = 20; 5 //方法1 6 a = a ^ b; 7 b = a ^ b; 8 a= a ^ b; 9 //方法2:加减。有弊端,两数相加之和有可能超出int的取值范围 10 /* 11 a = a + b; 12 b = a - b; 13 a = a - b; 14 */ 15 System.out.println("a = "+a); 16 System.out.println("b = "+b); 17 } 18 }
<<:左移,左边最高位丢弃,右边补齐0
>>:右移,最高位是0,左边补0,最高位是1,左边补1
>>>:无符号右移,无论最高位是0/1,左边补齐0
class Test1 { public static void main(String[] args) { /* <<:左移,左边最高位丢弃,右边补齐0 >>:右移,最高位是0,左边补0,最高位是1,左边补1 >>>:无符号右移,无论最高位是0/1,左边补齐0 */ System.out.println("5 << 1 ="+(5 << 1)); // 10 System.out.println("5 << 2 ="+(5 << 2)); // 20 //向左移动几位,就是乘2的几次幂 /* 00000000 00000000 00000000 00000101 5的补码 (0)00000000 00000000 00000000 00001010 10的补码(正数的反码、补码都是其本身,即10) (00)00000000 00000000 00000000 00101000 40的补码(正数的反码、补码都是其本身,即40) */ System.out.println("12 >> 1 ="+(12 >> 1)); // 6 System.out.println("12 >> 2 ="+(12 >> 2)); // 3 //向右移动几位,就是除2的几次幂 /* 00000000 00000000 00000000 00001100 12的补码 >>1 00000000 00000000 00000000 00000110(0) 6的补码 >>2 00000000 00000000 00000000 00000011(00) 3的补码 */ } }
e、最有效率的算出5*16
采用位移运算符<<,5<<4。
格式:(关系表达式)?表达式1:表达式2;
执行流程:如果关系表达式结果为true,执行表达式1,关系表达式结果为false,执行表达式2
代码:求两个数的最大值和三个数的最大值
class Test_Max { public static void main(String[] args) { int a = 10; int b = 20;
int c = 25; int M; M = (a < b) ? b : a;
S = (M > c) ? M : c; System.out.println("最大值 = " + s); } }
原文:https://www.cnblogs.com/I-love-Xiang/p/11133174.html