概述
1.11 运算符
1.11.1 [+、-、/、*、%]
[+]当+遇到String类型的时候 不再表示算数加法 而是表示追加连接
[-]算数减法
[*]当心数值超出int类型最大边界 注意使用long类型
一年的毫秒数:System.out.println(365L * 24 * 60 * 60 * 1000);
[/]整数除法取整:整数 / 整数 = 整数,小数除法可以按照常规输出
[%]取模运算符,求余数,最终结果的符号取决于位于参与运算的第一个数字的符号
System.out.println(5/0);//算数异常
System.out.println(5/2);//2
System.out.println(5/2.0);//2.5
System.out.println(5/0.0);//infinity-》无穷大
System.out.println(0.0/0.0);//Nan-》not a number-》不是一个数字
System.out.println(5%2);//取余数1
System.out.println(-5%2);//取余数-1
System.out.println(5%-2);//取余数1
System.out.println(-5%-2);//取余数-1
1.11.2 [+=、-=、*=、/=、%=]
他们能够保证运算符的左边的数据类型不发生改变 -》隐式强转
int x=45;
x += 5.5;//隐式强转:double转int
System.out.println(-5%-2);//取余数-1
1.11.3 [++、–]自增自减运算符
【a.取值 b.运算 ++x:ba x++:ab】
int x =10;
int y =x++ +2;
System.out.println(x);//11
System.out.println(y);//12
int x = 45;
//x++: 先取值45
运算 x=46
//++x:先运算 x=47
取值 x=47
//x++: 先取值47
运算 x=48
x = x++[45] + ++x[47] + x++[47];//139
//x++:先取值 139
运算
x=140
System.out.println(x++);//139
System.out.println(x);//140
1.11.4 > < <= >= ! != ==
【> < >= <= 】返回的都是boolean类型 -》 true/false
【!】非 !boolean
!true = false !false = true
【!=】判断左右两边的值是否不相等
System.out.println(45 != 45);//false
=和==之间的区别?
=:赋值运算符 将右侧的值交给左边的变量保管
int x = 45;
==:判断左右两边的值是否相等
System.out.println(45 == 45);//true
1.11.5 [&& || & |] 逻辑运算符
&&与&之间的区别?
相同点:&&和&都是逻辑与,需要前后两个条件都成立才能执行
不同点:&&逻辑的短路与,有短路特性
短路特性:如果通过前面的条件可以得出最终结论,后面的条件不再判断,直接舍弃
public class Exec7{
public static void main(String[] args){
Teacher t = new Teacher();
t.name="王";
t.age=51;
t.gender='女';
t.salary=3000;
t.show();
}
}
class Teacher{
String name;
int age;
char gender;
double salary;
public void show(){
if(age>50&&gender=='女'){
salary += 1000;
}
System.out.println(name+"老师,"+"今年"+age+"岁,"+"工资是"+salary);
}
}
||和|的区别?
相同点:||和|都是逻辑或,需要其中一个条件成立就能执行
不同点:||逻辑的短路或,有短路特性
如果通过前面的条件可以得出最终结论,后面的条件不再判断,直接舍弃
1.11.6 [& | ^ ~]按位(二进制)运算符
& :按位的与, 要求上下二进制都是1的时候才能写1 [逢0写0]
System.out.println(9 & 5);//1
9:8+1 = 000…1001
5:4+1 = 000…0101 &
000…0001
|:按位的或,要求上下只要有1就写1 [逢1写1]
System.out.println(9 | 5);//13
9:8+1 = 000…1001
5:4+1 = 000…0101 |
000…1101 : 8+4+1=13
^: 按位的异或,要求上下二进制不一样写1,一样的写0
System.out.println(9 ^ 5);//12
9:8+1 = 000…1001
5:4+1 = 000…0101 ^
000…1100 : 8 + 4 = 12
~: 按位取反,0-》1 1-》0
byte x = 9;
~x;
9:8+1 = 000…1001
~9 111…0110
111…1111 : -1-1-8=-10
重点
&:在某些情况下取代%
某些情况:
当我们拿着一个正数 % 2的n次方数的时候
结果等价于
我们拿着这个正数 & 2的n次方数-1的结果
//&的方法
if((x & 1) == 0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
//%的方法
if(x%2==0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
^:可以不借助第三块空间的方式交换两个变量的值
int x = 45;
int y = 90;
//创建第三方
int z = x;
x = y;
y = z;
//不创建第三方
int x = 45;
int y = 30;
x = x ^ y;
y = x ^ y;
x = x ^ y;
原理:
public class TestOperation9{
public static void main(String[] args){
int x = 45;
int y = 30;
//交换两个变量的值
x = x ^ y;
y = x ^ y;
x = x ^ y;
/**
int x = 45;
45 = 32 + 8 + 4 + 1 = 000..101101
int y = 30;
30 = 16 + 8 + 4 + 2 = 000..011110
x = x ^ y;
000..101101
000..011110 ^
000..110011 : 32+16+2+1 = 51 -> x
y = x ^ y;
000..110011
000..011110 ^
000..101101 : 32 + 8 + 4 + 1 = 45 -> y
x = x ^ y;
000..110011
000..101101 ^
000..011110 : 16 + 8 + 4 + 2 = 30 -> x
*/
//int z = x;//z = 45
//x = y;//x = 30
//y = z;//y = 45
System.out.println(x + " " + y);
}
}
1.11.7 [<< >> >>> ] 位【二进制】移运算符
*2
*4
*8
*16……*2^n
<<1
<<2
<<3
<<4……<<n(效率高)
/2
/4
/8
/16……/2^n
>>1
>>2 >>3
>>4……>>n
byte x = 9;
x<<1;
System.out.println(x);//18
(>>)和(>>>)区别?
(>>)有符号右移,移动之后空缺的高位除符号位用0替代
(>>>)无符号右移,移动之后空缺的高位直接用0替代
1.11.8 [?:]三元运算符,三目运算符
【条件 ? 第二部分:第三部分】
条件永远是boolean类型
成立true:执行第二部分 不成立false:执行第三部分
System.out.println(45>55?45:55);
//二三部分类型统一后才能做运算
System.out.println(45>55?45.0:55);//55.0
//如果数字在char类型的取值范围【0-65535内,此时的数字为ascii码 打印出出来的结果是ascii码对应的字符
System.out.println(45>55?'a':98);//b
//如果数字不在【0-65535内,此时char类型转为int类型,即ascii码,打印出来的结果是对应字符的ASCII码
System.out.println(45<55? 'a':-98);//97
一等优先级:[±*/%],[++,–],[> < >= <= ! = != ==],[&& || & |]
二等优先级:[+= -= *= /= %= ],[& ^ | ~]
&取代%:x%2(n)次方= x&2(n)次方-1
^只能交换的数据类型:byte char short int long boolean
[<< >>] <<取代(乘号): x*2(n) ==x<<n (>>)取代(除号):x/2(n)==x>>n
[?:]取代 if else if条件 ? if条件成立执行语句:else成立执行语句
最后
以上就是粗心萝莉为你收集整理的java中的运算符(详解)的全部内容,希望文章能够帮你解决java中的运算符(详解)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复