java自学日记no.2

date:2020/2/12

逻辑运算符 & | ^ !

&:与 有false就false
|: 或 有true就true
^: 异或 相同为false,不同为true
!: 非 取反
&&:短路与 若左false,判定为false,则不执行右
||: 短路或 若左true,判定为true,则不执行右

注:逻辑运算符左右两边必须是比较表达式,结果也是布尔类型的

与& 和 短路与&& 的区别

1.结果一样

2.短路与&& 具有短路效果,如果左边是false,右边就不执行了

int x = 4;
int y = 3;
System.out.println((++x == 4) && (++y == 3));
System.out.println(x);
System.out.println(y);

输出:x = 5; y = 3;(右边没有执行)

位运算符 & | ^ ~ << >> >>>

· &:与
· |:或
· ^:异或
· ~:取反
· <<:左移
· >>:右移
· >>>:无符号右移

System.out.println(6 & 3); 输出2
System.out.println(6 | 3); 输出7
System.out.println(6 ^ 3); 输出5
System.out.println(~6); 输出-7

解析:
位运算符都是将数值转化为二进制来算的
&与(有00):0110 & 0011 = 00102
|或(有11):0110 | 0011 = 01117
^异或(相同为0,不同为1):0110 ^ 0011 = 01015
~取反:~0110
00000000 00000000 00000000 00000110	6
11111111 11111111 11111111 11111001	~6(补码)
11111111 11111111 11111111 11111000	反码
10000000 00000000 00000000 00000111	原码 即-7
<< 左移,最高位丢弃,右边补0
>> 右移,最高位是0,补0,最高位是1,补1

对于正数来说,左移几位就是乘以2的几次幂,右移就是除以2的几次幂
负数要变成补码才能运算,然后再变成原码,左移也是左移几位就是乘以2的几次幂,右移需要看具体操作
不管左移右移,都不改变符号

负数左移 -12 << 1
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	原码 即-24

负数右移 -12 >> 3
10000000 00000000 00000000 00001100	-12
11111111 11111111 11111111 11110011	反码
11111111 11111111 11111111 11110100	补码
11111111 11111111 11111111 11111110	右移3位(补码)
11111111 11111111 11111111 11111101	反码
10000000 00000000 00000000 00000010	原码 即-2

注:正数右移到最后等于0,负数右移到最后等于-1

>>>无符号右移,和有符号右移>>不一样,高位全补0

三目运算符 (expr1) ? expr2 : expr3

expr1是比较表达式,若true,选择expr2,若false,选择expr3

Q:找出变量中的最大值

int q = 10;
int w = 20;
int e = 30;
int temp = (q > w) ? q : w;
int max = (temp > e) ? temp : e;
System.out.println(max);

选择结构语句 if switch

第一种

if(a > 1) {
	System.out.println(a);
}


第二种

if(a > 1) {
	System.out.println(a);
} else {
	System.out.println("0");
}


第三种

if(a > 1) {
	System.out,println(a);
} else if(a > 0) {
	System.out.println("0");
} else {
	System.out,println("1");
}
switch(a) {
	case 1:
		System.out.println("1");
		break;
	case 2:
		System.out.println("2");
		break;
	............
	default:
		System.out.println(n);
		break;
}
发布了38 篇原创文章 · 获赞 4 · 访问量 844

猜你喜欢

转载自blog.csdn.net/Hide111/article/details/104278608
今日推荐