位运算符、|和||、&和&&的区别
一.位运算符操作的都是整数类型
1.<<:左移,在一定范围内向左移动n位,相当于乘以2的n次幂
左移不管是正数还是负数,都是在后面添0;
2.>>:右移,在一定范围内向右移动n位,相当于除以2的n次幂,
右移的话,正数移动n位,在左边补n位的0,负数移动n位的话,在左边补上n位的1;
3.无符号右移:>>>,无论是正数还是负数,空缺位都是用0来补。
4.异或:^:两者不相同则为1,两者相同则为0。 A=(A^B)^B
二.|和||、&和&&的区别
1.首先是|和||
共同点:只要有任意一边的是true,那么结果就是true,当两边都是false的时候,结果是false
不同点:|是两边都会运算,然后来判断结果;||是先运算左边的式子,如果为true,那么直接返回结果为true,如果左边的式子不为true,再去运算右边式子
2.&和&&
相同点:运算符的两边都是true的时候,结果才是true;
不同点:&是两边都会运算,然后来判断结果;&&是先运算左边的式子,如果是false,直接返回结果为false,否则再去运算右边的式子,如果是true结果就是true,如果是false,结果就是false;
三. 练习
题目:交换两个变量的值
方式一:定义临时变量
int temp = num1;
num1 = num2;
num2 = temp;
方式二:不能定义临时变量
就像是在一片大海上,有两块浮冰,每块浮冰只能让一个人站立,现在每块浮冰上面站着一个人,现在想要让他们交换一下位置。可以先让A骑到B 的头上,然后让A在踏上之前B站立的浮冰上,此时B在踏上刚才A站立的浮冰上。
num1 = num1+num2;
num2 = num1-num2;
num1 = num1-num2;
优点:可以不用定义临时变量;
缺点:num1+num2可能超出数值范围、只适用于数值型
方式三:使用位运算符
因为A=(A^B)^B,所以
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
缺点:同样是只适用于数值型。