char类型可以在数学运算中隐式转换为整数;
基本数据类型,数值相等时,就相等。
char ch = 'a'; int i = 12; double ii = 12.0; System.out.println(i==ii);//true i=i+ch; System.out.println(i);//109按位运算(二进制):
与运算(&)
前后两个数字转化为二进制,右侧对齐,上下比较,两者都为1则结果为1,有一个不为1则结果为0;
int a = 7 & 8; //7: 111 //8:1000 //a:0000 System.out.println(a);//a = 0
或运算(|)
前后两个数字转化为二进制,右侧对齐,上下比较,两者有一个为1则结果为1,两者都为0则结果为0;
int b =7 | 8; //7: 111 //8:1000 //b:1111 System.out.println(b); //b = 1111 = 15
异或运算(^)
前后两个数字转化为二进制,右侧对齐,上下比较,两者相同为0,不同为1;
b = 7 ^ 8; //7: 111 //8:1000 //b:1111 System.out.println(b);//b = 1111
右移 (>>) ,左移(<<)
1). A>>B A为要处理的数字,B为位移的位数,
2). 向右移,溢出的位数就丢失了。
3). 往左移,空出的位数补0。
int c = 15>>2; System.out.println(c);//转化为二进制,右移两位 c = Integer.MAX_VALUE; c = c<<31; System.out.println(c); System.out.println(Integer.MIN_VALUE);
>>> 与>> 的区别:
(>>):为有符号右移,正数右移时,高位补0,负数高位补1(负数以补码形式存储,所以不断右移的最终结果会为-1,因为补码 = 反码 -1)
(>>>):为无符号左移,无论正数负数高位都补零,符号位也跟着移动
int d = -1; System.out.println(d>>1); System.out.println(d>>>1);
结果:
## 三元运算符: ```java String str = a > 12 ? "true" : "false";
(&& ||)和(& |)的区别?
1.一个是逻辑运算符,一个是位运算符。
2.逻辑运算符只能针对布尔(Boolean)类型进行逻辑运算,而位运算还可以对数值进行逻辑运算。
3.逻辑运输算符有“短路”情况,即前面的表达式可以得到最终结果时,后面的表达式不会被执行。
if语句若后面不加括号只控制if后边的一行,多了不控制。
1.switch可以匹配什么类型?------整数(浮点型不可以,long类型不可以),字符(char),字符串,枚举。
2.case、default 书写顺序可以打乱
3.匹配所有的case项,若都不符合才会执行default。
4.匹配到某一个值,就是从该行开始运行,一直运行到break或代码块结束;
int a=12;
switch(a) {
default:System.out.println("a为非0123的值:");
case 0:System.out.println("a:"+0);
case 1:System.out.println("a:"+1);
case 2:System.out.println("a:"+2);
case 3:System.out.println("a:"+3);
}
int a=2;
switch(a) {
case 0:System.out.println("a:"+0);
case 1:System.out.println("a:"+1);
case 2:System.out.println("a:"+2);
case 3:System.out.println("a:"+3);
default:System.out.println("a为非0123的值:");
}
int a=2;
switch(a) {
case 0:
System.out.println("a:"+0);
break;
case 1:
System.out.println("a:"+1);
· break;
case 2:
System.out.println("a:"+2);
break;
case 3:
System.out.println("a:"+3);
break;
default:
System.out.println("a为非0123的值:");
break;
}



