一、运算符
赋值运算符—(= += -= *= /= %=)
例如:
a += 1;等价于a = a+1;
算术运算符(+ - * / %)
向零取整问题:
int a = 1/3;
int b = 2/3;
//a和b的值都为0
// 取余结果问题
int a1 = 1%3;
int a2 = 1%-3;
int a3 = -1%3;
int a4 = -1%-3;
// 结果的符号和被除数一致(a1=3 a2=3 a3=-3 a4=-3)
// 除0问题
// int a5 = 1/0; // ArithmeticException
// 本身语法没有错误,编译时不会报错,但是由于0不能作为除数,所以在运行时会抛出算术异常
double e1 = 1.0/0; // Infinity 正无穷
double e2 = -1/0.0; // -Infinity 负无穷
double e3 = 0.0/0; // NAN:not a number
// 不同数据类型发生的运算在运算时会自动把小的类型转换为大的类型
//,此时发生的运算最大的类型是double,所以int数据0转化为double数据0.00,在Java中无论是float类型还是double类型,他们的精度都不是特别的准确,所以0.00不能代表0,所以运算结果会出现正无穷和负无穷。
// +的作用:
// 1、可以作为算术运算符:+左右两侧都是操作数
// 2、可以作为字符串连接符:+左右两侧其中一侧为字符串
// 3、可以作为正数的意思
增减运算符(++ --)
a++和++a的区别:
a++先赋值再运算
++a先运算再赋值
如果只是一条语句的话,就等价于a=a+1
关系运算符
关系运算符有六个,== != > < <= >= ,返回值是boolean类型
逻辑运算符(&& || !)
相同点:
都可以作为逻辑运算符
不同点:
作为逻辑运算符的时候&&会发生短路现象,就是左侧围false,右侧就不会运行了。
&不管左侧是否为false,右侧都运行,&还可以作为位运算符进行位运算。
位运算符(& | ~ ^ << >> )
位运算符运算时把数字看成二进制,0代表false,1代表true,然后对这两个二进制数每一位和每一位进行逻辑判断,得到的结果转化为十进制就是正常的位运算结果。 \
位运算的计算方式:
int a = 15; // 二进制:0000 1111
int b = 16; // 二进制:0001 0000
int c = a & b; // 二进制 0000 0000
int d = a | b; // 二进制 0001 1111
int e = ~a; // -15
int f = a ^ b; // 0001 0000 (不同为1,相同为0)
// << (>>) 整个二进制数向左移(向右移),在最右面补0
条件运算符(三目运算符)
形式:x?y:z
x必须是一个boolean类型表达式,如果x为true,那么输出y的值,如果x为false,那么输出z的值。(可以代替简单的if语句)
注意:
&什么情况是逻辑与?什么情况是按位与?
答:当&两边的操作数是boolean值时是逻辑与,当两边操作数是整型和字符型时是按位与。
二、表达式
用于计算的公式,由算法、运算数和运算符组成。(表达式具有值和类型)