Java 运算符

来源:互联网 发布:东方网络怎么了 编辑:程序博客网 时间:2024/06/13 23:22

哎,运算符忘记写了。先做个目录。

一、算术运算符

1、 加 : +
2、减 : -
3、乘 : *
4、取整: /
5、 取余 : % (涉及到正负号的,以左边操作数为准)
7、递增 : ++
8、递减 : –

public static void main(String[] args) {    int a = 5;        int b,c,d,f,g,h;        b = +a; //正值        System.out.println("b = "+b + "; a = "+a );        c = -a ; //负值        System.out.println("c = "+c + "; a = "+a);        int l = 2;        d = ++l; // 先 l = l+1,再d = l        System.out.println("l = "+l + "; d = "+d);        int m = 3;        f = m++; // 先 f = m,再 m = m+1        System.out.println("m = "+m + "; f = "+f);        int n = 4;        g = --n; // 先 n = n-1,再 g = n        System.out.println("g = "+g + "; n = "+n);        int o = 6;        h = o--; // 先 h = 0,再 o = o-1        System.out.println("o = "+o + "; h = "+h);        // 取整        int x = 10;        int y = 3;        int integer = x/y;  //注意: 除数不能为0.否则会报算术异常         int remainder = x%y;        System.out.println("取整:"+integer+"; 取余 = "+remainder);        //取整,除数不能为0。但是,如果分子是double时,分母为0是正确的,只不过得到的值是无强大 Infinity        double z = 10.0;        System.out.println(z/0);        /** 当二元运算的两个操作数的数据类型不同时,         *  运算结果的数据类型和参与运算的操作数的数据类型中精度较高         *  转换原则: 低精度到高精度会自动转换,而高精度到低精度则要类型强制转换         *   byte 、short、int、long、float、double 从左往右         *    char 的精度比int 低         *  注意事项:         *  1) 两个char型运算时,自动转换为int型;         *     当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换;         *  2) "数据晋升" : byte、short和char(低于int的数据类型)进行算术运算后,结果会自动提升成int类型;           */        // 自动转换        double  doubleValue =  10.0;        int interValue = 5;        System.out.println("自动转换:"+(doubleValue+interValue));        // 强制转化        int forceTrans = (int)doubleValue;        System.out.println("强制转换:"+forceTrans);}       

运行结果:
这里写图片描述

注意这么一个例子 :

short s = 4;s = s + 5 ;  // 这样写是错误的,编译不会通过,原因:s会被自动提升成int类型,运算结果是int 类型,无法赋值给short 类型。s+=5; // 编译通过,因为+= 运算符在给s赋值时,自动完成了强转操作。

.
.

二、关系运算符
关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。比较运算符是程序设计中实现数据比较的基础,也是很多逻辑实现的基础,在程序逻辑中,经常通过比较一定的条件,来判断后续的程序该如何执行。

1、等于 : ==
2、不等于 : !=
3、大于 : >
4、小于 : <
5、大于等于 : >=
6、小于等于 : <=

例子:
这里写图片描述
.
.

三、逻辑运算符

1、与 : &&
2、或 : ||
3、异或 : ^
4、简化或 : |
5、简化并: &
6、非 : !

其真值表表现如下:(图是扒别人的)
这里写图片描述

短路现象: &和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能(是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止)。

举个例子 : 对于&来说,如果左侧条件为false,也会计算右侧条件的值
而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。

注意 : 异或(^)相同为false,相反则为true
.
.
.

四、位运算符

1、按位取反运算 : ~
2、按位与 运算: &
3、按位或 运算 : |
4、按位异或运算 : ^
5、右移 : >> (其实就是除以以2的移动的位数次幂)
6、无符号右移 0 填充 >>>
7、左移 : << (其实就是乘以2的移动的位数次幂)

如下图:
这里写图片描述

例如 : 6 << 2 = 6 *2^2 = 24
6 >> 2 = 6 / 2^2 = 1;

由此可见 : 左移 变大,右移变小。
位运算比基本运算符高效。

点击查看位运算符

五、条件运算符(三目运算符)

a = 布尔表达式 ? 为true时所赋予的值 : 为false 是所赋予的值

例如 : 取整数 a,b 的最大值

int x = a > b ? a : b;
.
.
.
六、赋值运算符

1、= :
2、+= : 对于 x+= y 等效于 x= x+ y
3、 -= : 对于x-= y 等效于 x = x- y
4、>= : 对于 x *= y 等效于 x = x*y
5、/= : 对于 x /= y 等效于 x = x /y
6、%=: 对于 x%= y 等效于 x = x%y
7、&= : 对于x &= y 等效于 x = x & y
8、| = : 对于 x |= y 等效于 x = x | y
9、^= 对于 x ^= y 等效于 x = x ^y
10、 <<= : 对于 x <<= y 等效于 x = x << y
11、 >>= : 对于 x >>= y 等效于 x = x >> y
12、>>>= : 对于 x >>> = y 等效于 x = x >>> y

.
.
.

七、运算符的优先级

优先级自上而下,级别由高到低。
这里写图片描述

.
.
八、书写运算符注意事项

1、 不要把表达式写得过于复杂,如果一个表达式过于复杂,则 把他分成几步完成 。
2、不要过多依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用小括号()来控制表达式的执行顺序。

给一道经典面试题,交换a,b的值。

方法一:
int temp;

temp = a;
a = b;
b = temp;

方法二 : (如果a,b数值非常大,容易超出int 范围)
a = a + b;
b = a - b;
a = a - b;

方法三 :

n = n ^m;
m = n ^m; // (n^m) ^m = n
n = n ^m; // n ^(n^m) = m

原创粉丝点击