一、Java运算符
我们把常量存到变量的目的是为了运算,计算机就是处理数据的,它的原理就是运算数据。运算数据就用到了运算符。
运算符有以下几种:
1.算术运算符
%:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
例题:
下列代码运行的结果是(C )
public static void main(String[] args) {
int x = 4;//定义一个变量x,给它赋值4
int y = 5;//定义一个变量y,给它赋值5
if(x++>4 & ++y>5) {//++在后是先用后加,所以就是4>4,之后4+1=5,这时x=5。++在前是先加后用,
//所以是6>5,y=6。因为&运算符是一边错,就返回0(也就是false)。不执行{}里的语句,所以最后输出结果是C
x++;
}
System.out.println("x=" + x + ",y=" + y);
}
A. x=4,y=5
B. x=4,y=6
C. x=5,y=6
D. x=8,y=6运算符演示
在Java 中提供运算功能的就是运算符(Operator),算术运算符有加(+)、减(-)、乘(*)、除(/)这类的运算符。另外还有一个很常用的取模运算符(%)。这类以数学运算为主的运算符称为算术运算符(Arithmetic Operator)。
2.赋值运算符
赋值运算符的符号有:=,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=
示例:
int a,b,c; a=b=c=3; int a=3; //这个叫把右边赋给左边 a+=5;(这个叫把左右两边的和赋给左边)等同运算a=a+5;
优点:它会实现数据类型的自动转换。
3.比较运算符
instanceof
比较运算符的特点:运算完的结果,要么是true,要么是false。
4.逻辑运算符
逻辑运算符的值一定为逻辑值(true或false)
&&和||的优点是:节约了判断时间,提高了判断效率。因为它们是只要有一边判断就可以。
5.位运算符
位运算是直接对二进制进行运算。
注:当&、|两边是整数时执行的是位运算,而两边是boolean值时执行的就是逻辑运算。
简图:
<<:其实就是乘以2的移位的位数次幂
>>:就是除以2的移位的位数次幂
<<<、>>>:表示无符号左移、无符号右移
>>:最高位补什么由原有数据的最高位值而定。
如果最高位是0,右移后用0补空位。如果最高位是1,右移后用1补空位。<<同理。
>>>:无论最高位是什么,右移后都用0补。<<<同理。
~:这个用的时候不多,它就是把二进制的0变1,1变0。
^:一个数异或一个数两次,结果还是那个数。如:6^3^3=6
例题:
用最有效率的方法算出2乘以8等于几?
答:2<<3。相当于2*(2*2*2)=16
因为计算机是二进制的,而位运算是直接对二进制进行运算。所以你用位运算是最快的是最小效率的。它是CPU直接执行。
对两个变量的数据进行互换。简图
int a = 1,b= 2;
int c;
c = a;
a = b;
b = c;
结果:a = 2,b = 1。
对两个变量的数据进行互换。(不需要第三方变量)
int a = 3,b = 5;
a = a +b;//a = 8
b = a - b;//b = 3
a = a - b;//a = 5
a = a ^ b;
b = a ^ b;//b = a ^ b ^ b = a
a = a ^ b;//a = a ^ b ^ a = b
结果:b = 3,a = 5。
6.三元运算符
三元运算符也是条件运算符
格式:变量 = (条件)?表达式1:表达式2;
规则:先判断条件,若条件为true,则取表达式1的值作为整个条件运算符组成的表达式的值并赋给左边变量。反之,则取表达式2的值赋给左边变量。
例:max = a > b ? a:b;
当a大于b时,则将a的值赋给max; 当a小于b或等于b时,则取b的值赋给max。
二、类型转换
强制和转换
例题:
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;编译失败,因为s1是short类型,s1+1(s1会被提升为int类型)运算结果是int型,不能赋值给short类型。可修改为s1 =(short)(s1 + 1)//强制转换 。
short s1 = 1; s1 += 1编译通过,因为+=运算符左边给s1赋值时,自动完成了强转操作。
三、运算符优先级
如果在程序中,要改变运算顺序,可以使用()来改变。
总结:
为了不至于看运算顺序发蒙,最好用()区分,这样看的会清楚一些,还有一个要注意的地方就是在java中的余数问题,这里没有四舍五入,你要是定义整型的,会直接舍去余数,不管是几都舍去。
这里还有一些进制的转换。详见黑马程序员_java进制转换。