1,比较运算符:>,<,==,!=,>=,<=
如果用==比较两个引用类型变量,比价的是内存地址。
比较运算符运算完的结果必须是true或false。
2,逻辑运算符
&(AND与)、|(OR或)、^(XOR异或)、!(NOT非)、&&(AND短路与)、||(OR短路或)
逻辑运算符用于连接两个boolean类型的表达式。
例如:
int x = 3;
system.out.println(x>2 & x<5);
打印结果时true,如果x=6,则结果时false。
另外的比较运算:instanceof,检查是否是类的对象。
例如:”Hello” instanceof String 是true。
3,异或:^
true ^ true = false
true ^ false = true
false ^ true = true
false ^ false = false
异或的运算规律:^符号的两边结果如果相同,结果是false,两边的结果不同,结果是true。
4,!!true = true
5,&&和&的区别:
&&和&运算结果时一样的,但是运算过程有点小区别。
&:无论左边的运算结果是什么,右边都参与运算;
&&:当左边为false时,右边不参与运算。
||和|的区别:
||和|运算结果时一样的,但是运算过程有点小区别。
|:无论左边的运算结果是什么,右边都参与运算。
||:当左边为true时,右边不参与运算。
3-3,位运算符
1,二进制位的运算:
<<(左移)、>>(右移)、>>>(无符号右移)、&(与运算)、|(或运算)、^(异或运算)、~(反码)。
2,十进制数的位运算是先将一个十进制数转换为二进制,再对二进制位进行位运算,再将得到的二进制转换为十进制。
例如:&运算,计算6&3
6的二进制是110,3的二进制是011.
所以:(1表示true,0表示false)
110
&011
010
再将010转换为十进制,所以6&3=2。
|、^、~与&类似。
3,&运算的小规律。
两个数进行&运算,取两串二进制数中第一个’1’在较低位的那串,然后只取两串中1后面的位数运算即可,因为两边只要有一个为0,其结果就为0,不是二进制中的有效数字。
例如:
11010111
&00010001
第二串的第一个1在较低位,所以两串中的数只计算这一位后面的即可,因为前面的三个0与任何数做&运算,都是0,0不是有效位。
4,规律:6^3=5
110
^011
101
^011
110
即:6^3^3=6
规律:一个数异或同一个数两次,结果还是这个数。
此规律可以用于加密。例如:将一个图片的底层二进制码异或3,此时这张图片已经不能看,若将这张图片的底层二进制码再异或3,这张图片又能正常使用。
5,~反码:二进制取反,即0变为1,1变为0。
3-4,位移运算符
1,<<
左移几位其实就是该数乘以2的几次方。
3<<2=12, = 3*22
<<可以完成2的次幂运算。
<<图示:
2,右移:补位时,最高位是什么就用什么补。
右移几位其实就是该数据除以2的几次方。
3,>>>:无符号右移。数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
4,位运算练习:
对两个整数变量的值进行交换。
[java]
//(1)有第三方变量:
int a = 3 , b = 5;
int c;
c = a ;
a = b;
b = c;
sop(“a=”+a+”,b=”+b);
//a=5,b=3
//(2)无第三方变量
int a = 3 , b = 5;
a = a + b;
b = a – b;
a = a – b;
sop(“a=”+a+”,b=”+b);
//a=5,b=3
//这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会变化。
(3)无第三方变量
//位运算法,一个数异或同一个数两次,结果还是这个数。
int a = 3 , b = 5;
a = a ^ b; //a = 3 ^ 5
b = a ^ b; //b = (3 ^ 5) ^ 5; b = 3
a = a ^ b; //a = (3 ^ 5) ^ 3; a = 5
sop(“a=”+a+”,b=”+b);
//a=5,b=3
//一般都用第一种方式,因为
阅读性强。
3-5,三元运算符
格式: (条件表达式) 表达式1:表达式2;
如果条件表达式结果为true,则返回表达式1的结果,否则返回表达式2的结果。
[java]
int x=0,y;
y = (x > 1) 100:200;
sop(y);
结果:y=200;
例:获得三个整数中较大的整数。
[java]
int o,p,q;
itn temp = o>p o:p;
int max = temp>q temp:q;
sop(“max=”+max);
3-6,语句——if格式
[java]
int a=3,b;
if(a>1)
b=100;
else
b=200;
sop(“b=”+b);
虽然b没有被初始化,但if语句都要执行,可以输出b的结果。
[java]
b = a>1 100:200; //三元运算符就是if else语句的简写形式。
b = a>1 sop(100):sop(200); //这个式子中,b没有赋值,三元运算符是运算符,必须有一个运算结果,而if else语句可以没有运算结果。