运算符
算术运算符:
+ - * /
会出现不精确的报错情况
%(取余, 模运算)
5/2 五除以二余1 (5%2)运算结果为1
任何数模于2 结果不是0就是1 可以利用该特点来进行开关算法的定义 开关开关开关010101
+(连接符)
什么时候体现 什么时候是连接符:
3+2 三加二
3+“2” 三加字符串二
任何数据和字符串+都是相连接 所以3+“2”的结果为“32”(字符串32)
例如:
(“5+5=”+5+5);
运算结果为 5+5=55
(“ab”+5+5);
结果 ab55
意思为ab和5相连接在和5相连接
int a=4, b=5;
System.out.println(a+","+b); ("a="+a+","+"b="+b);
结果 4,5 a=4,b=5
// ++ 自增:就是在原有数据基础上+1,在赋给原有的数据
–
int a=3;
a++; //a= a+1; //(也就是对 a=a+1 运行) 也可以是++a
System.out.println(“a=”+a); //字符串会直接输出(双引号里面的东西会直接输出 “a=”会直接输出为a= 后面加连接符加其它数据)
运算结果 a=4
int a=3,b;
b=a++;
System.out.println("a="+a+"b="+b);
a=3b=4
i=3;
i=i++; i=i++;
结果 i=3 temp(临时)=i;
i=i+1;
i=temp;
赋值运算符: = 特殊表现形式: += -= *= /= %=
int a=4;
a=b=c=d=4; (连续赋值)
a+=2; //a=a+2;
short s=3;
s+=4; (做了强制类型转换)
s=s+4; (没有做强制类型转换)
比较运算符&逻辑运算符
class OperateDemo3
{
public static void main(String[] args)
{
System.out.println(3>2); //true;
}
}
注:
- 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
- 比较运算符 “==”不能误写成“=”。
逻辑运算符
2<x<5必须拆分开为 x>2 x<5
逻辑运算符的作用:
用于连接两个boolean类型的表达式。
&:与 |:或
System.out.println(x<5&x>2);
“&”符号的运算特点:
true& true=true
true&false=false
false&true=false
false&false=false
&的运算规律 :&运算的两边只要有一个false,那最终结果一定是false
只有两边都是true的时候最终结果才是true。
System.out.println(x<2|x>5);
"|"运算符的运算特点:
true|true =true;
true|false= true;
false|true=true;
false|false= false;
“|”的运算规律:| 运算的两边只要有一个是true,那结果一定是true,只有两边都是false的时候最终结果才是false。
“^” 异或:和或有点不一样。
true^true =false;
true^false= true;
false^true=true;
false^false= false;
"^
"的运算规律:^的两边如果相同,结果就是false;只有两边结果不同,则结果是true。
“!” 非运算:判断事物的另一面。
!teue=false;
!false=true;
&&与与:和单&的区别,只要左边为false那么右边直接不运算,则结果为false。
和单&的相同处,最终的运算结果是相同的。
(运算过程有区别)单&无论左边运算结果是什么,右边都参与运算。
||或或:和单|的区别,只要左边为true,那么右边直接不运算,则结果为true。
和单|的相同处,最终的运算结果是相同的。
(运算过程有区别)单|无论左边运算结果是什么,右边都参与运算。
位运算符
· << 相当于乘以2的倍数
· >> 相当于除以2的倍数 移n位,是对乘以或者除以2的n次幂。
一个数异或同一个数两次,结果还是这个数。 6^3=5 6^3^3=6
反码:
原码 反码 补码。
(原码变反码:0变1,1变0。 在+1就是补码)
·· << 左移
System.out.println(3<<2);//3左移两位,左移几位就是该数据乘以二的几次方,可以完成2的次幂运算
·· >> 右移
右移几位就是该数据除以2的几次幂
对于高位出现的空位,原来的高位是什么就用什么补这个空位
·· >>> 无符号右移:数据进行右移时高位出现的空位无论原高位是什么空位都用0补。 正数负数都用0补。
练习:
1.最有效率的的算出2乘以8等于几
2<<3
System.out.println(2*8);
System.out.println(2<<3)
- 对两个整数变量的值进行互换(不需要第三方变量)
int a=3,b=5; a=a+b;//a=3+5;a=8; b=a-b;//3+5-b;b=3 a=a-a; //3+5-a=5; System.out.println("a="+a+",b="+b);
但是这种方式的缺陷在于,如果两个整数的数值过大,会超出int范围,会强制转换。数据会变化。所以用位运算。
a=a^b;a=3^5;
b=a^b;b=(3^5)^5;b=3;
a=a^b;a=(3^5)^3;a=5;
int c; //开发时一般用这种
c=a;
a=b;
b=c;
三元运算符
(条件表达式)?表达式1:表达式2;
如 : z=(x>y)?x:y;
//获取两个整数中的较大的整数。
int a.b;
int max =a>b?a:b;
//获取三个整数中较大的整数。
int a,b,c;
int temp = a>b?a:b;
int max2 =temp>b?temp:c;