算数运算符 : + - * / % ++ -- +
class TestAri{ public static void main(String []args){
//除:
int i = 12;
int j = i/5; //j=2
double d = i/5; //d=2.0
double d2 = (double)i/5; //d2=2.4
double d3 = i/5.0; //d3=2.4
System.out.println(j);
//取模:%取余数 ,结果的符号取决于被模数 也就是前面的那个数
int i1 = 12%5; //2
int i1 = -12%5; //-2
int i1 = 12%(-5); //2
int i1 = -12%(-5); //-2
//前++: 先自增1,后做运算
//后++: 先做运算,后自增1
int myInt1=10;
int myInt2=myInt1++;//后++
System.out.println(myInt1);11
System.out.println(myInt2);10
int myInt3=10;
int myInt4=++myInt3; //前++
System.out.println(myInt3);//11
System.out.println(myInt4);//11
}
}
赋值运算符: += -= *= /= %=
class GetValue{ public static void main(String []args){
int i1 = 10;
i1 += 3;//i1 = i1+3;
short s = 10;
// s = s+3;//编译不通过
s = (short)(s+3)//这样才可以的,但是不建议这样去实现
s += 1;//一般采取这种方式 ,这样既可以实现运算 又不会更改s的数据类型。
int i2 = 12;
i2 %=5; //i2 = i2%5;
System.out.println(i2); } }
等于:==
赋值:=
比较运算符: == != < > <= >= instanceof (检查是否是类的对象 "Hello" instanceof String 结果为 true )
逻辑运算符: & 逻辑与 | 逻辑或 ! 逻辑非
&& 短路与 || 短路或 ^ 逻辑异或(两个相异的就是true)
a | b | a&b | a|b | !a | a^b | a&&b | a||b |
true | true | true | true | false | false | true | true |
true | false | false | true | false | true | false | true |
false | true | flase | true | true | true | false | true |
flase | flase | false | false | true | false | false | false |
class TestLogic{ public static void main(String[]args){ boolean a = true; boolean b = false; // &&与&&的区别: &:不管左边是true还是false,右边都会进行运算
&&:当左边为false时,右边不再进行运算了
//以后使用时,建议使用&&
int i1=10;
if(a&(i1++) > 0){
System.out.println("我喜欢芳芳");
} else{
System.out.println("我很喜欢芳芳");
}
System.out.println(i1);//11
int i2=10;
if(a&&(i2++) > 0){
System.out.println("我喜欢芳芳");
} else{
System.out.println("我很喜欢芳芳");
}
System.out.println(i2);//10
//|与||的区别: |:左边是true时,右边照样进行运算
// ||: 当左边为true时,右边不再进行运算了
//在使用时选择: ||
}
}
位运算符:
注意: 没有 <<<
运算符 | 运算 | 范例 |
<< | 左移 | 3<<2=12 3*2*2=12 |
>> | 右移 | 3>>1=1 3/2=1 |
>>> | 无符号右移 | 3>>>1=1 3/2=1 |
& | 与运算 | 6&3=2 都为1 结果才为1 |
| | 或运算 | 6|3=7 只要有一个为1 结果为1 |
^ | 异或运算 | 6^3=5 只有两个不一样才为1 |
~ | 反码 | ~6=-7 取反 |
class TestBit{ public static void main(String [] args){
int m = 12;
int n = 5;
System.out.println("m:" + m + "n:" + n);
//操作:交换m n
//方法一:提供一个临时变量
// int temp = m;
//m = n;
//n = temp;
//方法二:一个骑到另一个的头上了,当m n 都较大时可能出现精度损失
m = m+n;//12+5
n = m-n; //17-5=12
m = m-n; //17-12
//方法三:优点:没有上面两个方法的缺点
m = m^n;
n = m^n;//(m^n)^n == m
m = m^n;//(m^n)^m == n
System.out.println("m:" + m + "n:" + n);
}
}
31 << 3 =248=31*2*2*2= 31*2^3
三元运算符:(条件表达式)?表达式1:表达式2?
表达式为true 运算结果为表达式1,false 运算结果为表达式2;
要求: 表达式1与表达式2同一种数据类型
既然是运算符,就一定会有运算的结果,结果的数据类型与表达式1,2的类型一致。
三元运算符一定程度上可以与if-else互换。(一定可以转换为if-else 反正不成立)。
class TestSanYuan{ public static void main(){ int i = 10; int j = 20; //此时max记录了i与j的较大值 int max = (i>j)?i:j;
//String str = (i>j)?"i大":"j大";
String str = (i>j)?"i大" :(i==j)?"相等":"j大";
System.out.println(max);
System.out.println(str); } }
从控制台输出60的十六进制。
class TestInput{ public static void main(String [] args){ int i = 60; int j = i &15;//获取到i的最低4位的值 String k1=(j<=9)?j+"":(char)(j-10+'a')+""; i = i>>4; int z = i & 15;//获取i的高位四位的值 String k2=(z<=9)? z+"":(char)(z-10+'a')+""; System.out.println(k2+k1); } }