instanceof 也是比较运算符的一种。用于对象判断。
&符号:
true & true = true
true & false = false
false & true = false
false & false = false
|符号:
true | true = true
true | false = true
false | true = true
false | false = false
^异或:
true ^ true = false
false ^ false = false
true ^ false = true
false ^ true = true
结果相同为假,不同为真。
!非:
!true = false;
!false = true
&& || 短路运算
位运算符:二进制位运算符
<<左移 3<<2 = 011<< 2 = 01100 = 12 左移几位就是*几个2。左移可以完成2的次幂运算。
>>右移 6>>1 = 0110>>1 = 0000011 = 3 右移相当于除2的几次幂。最高位是什么,就拿什
么补空位。
>>>无符号右移 算术右移。当数右移动的时候,无论高位是什么,都用0补充。
6|3 = 110|011=111 = 7 特点是:保留有效位。
&与符号 6&3=110&011=010=2 与运算可以取某一个数字的后几位或者前几位,与111...,
用来取数据中的某一段,或者八进制或者16进制。
^异或 6^3=110^011=101=5 6^3^3 = 6 一个数异或同一个数两次,仍然是这个数。适用加密。
~反 ~6=~00000110=11111001(取反后,符号位保留,其他位取反在加1)=10000110+1=10000111 = -7
反码是将其2进制数每一位按位取反。
即1改为0,0改为1.
补码则不同。
正数的补码是其源码本身
负数的补码是其除符号位以外其他每一位按位取反再加一,符号位不变。
练习:用最有效的方式算出2*8=?
2= 010 010<<3 = 2*2(3)=2*8;
对两个整数变量的值进行互换,不需要第三方变量介入。
int a = 2;
int b = 3;
a = a^b; a=a+b;(如果两个整数过大,会引起精度丢失,不建议使用)
b = a^b; b=a-b;
a = a^b; a=a-b;
三元运算符: 三元运算符就是if else 的简化形式
int max = (a>b)?a:b;
int mMax = (max>c)?max:c;
程序流程控制:
if(x>1)
if(x<2)
System.out.println("yes"); 等价于
if(x>1){
if(x<2)
{
System.out.println("yes");
}
}单条语句,不等价于单行语句。
if(true); 无控制体的控制语句。
sitch语句一执行,那么case 内的东西都加进内存中。byte short int char
无论default 放在什么位置,首先执行的是第一个case 语句。
break 可以结束switch语句。
int x=0;
switch(x){
default:
system.out.println("default");
case 1:
system.out.println("case 1");
case 2:
system.out.println("case 2");
case 3:
system.out.println("case 3");
break;
case 4:
system.out.println("case 4");
break;
}
输出结果为:default case 1 case 2 case 3 效率相对高一点。
循环:
int x = 1;
do{
System.out.println(x);
x++;
}while(x<3);
int sum = 0;
while(i<=10)
{
sum +=i;
i++;
}
System.out.println(sum);///累加思想。定义变量。然后按照某种规律变化。
for循环
for(System.out.println("a"),System.out.println("aa");x<3;System.out.println
("c")){
System.out.println("d");
x++;
}
内存的问题。while和for的区别:主要增量的范围区间问题。
循环,主要是对多次使用的时候,考虑用循环。
无限循环:while(true){}
for(;;)