java基础之运算符

来源:互联网 发布:2017年伤感网络歌曲 编辑:程序博客网 时间:2024/06/06 21:01

1.按操作的数目划分
可分为一元运算符(单目)和多元运算符(多目),其中多目运算中有双目和三目。
单目运算符就是只有需要一个操作数的运算符, 如:--、++、+、-。示例:a++、a--
同理,双目运算符就是需要两个操作数的运算符, 如:+、-、*、/、= 等。示例:1+2
三目运算符只有一个 (? :)。 示例:a>b?max=a:max=b


算数操作符描述例子+加法 - 相加运算符两侧的值A + B 等于 30-减法 - 左操作数减去右操作数A – B 等于 -10*乘法 - 相乘操作符两侧的值A * B等于200/除法 - 左操作数除以右操作数B / A等于2%取模 - 左操作数除以右操作数的余数B%A等于0++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)--自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

1、自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数。
ublic class selfAddMinus{ public static void main(String[] args){ int a = 3;//定义一个变量; int b = ++a;//自增运算 int c = 3; int d = --c;//自减运算 System.out.println("进行自增运算后的值等于"+b); System.out.println("进行自减运算后的值等于"+d); } }
运行结果为:
解析:
int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4
int d = --c; 拆分运算过程为: c=c-1=2; d=c=2, 最后结果为d=2,c=2
2、前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。
3、后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算 实例:

关系运算符描述例子==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B)为假(非真)。!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(A != B) 为真。>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B)非真。<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A> =检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A> = B)为假。<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B)为真。
逻辑操作符描述例子&如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100|如果相对应位都是0,则结果为0,否则为1(A | B)得到61,即 0011 1101^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001〜按位补运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011<<按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000>>按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111
赋值操作符描述例子=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C -  A* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A等价于C = C / A(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A<< =左移位赋值运算符C << = 2等价于C = C << 2>> =右移位赋值运算符C >> = 2等价于C = C >> 2&=按位与赋值运算符C&= 2等价于C = C&2^ =按位异或赋值操作符C ^ = 2等价于C = C ^ 2| =按位或赋值操作符C | = 2等价于C = C | 2
常见关于运算符的笔试题
1. &和&&的区别
1) &和&&都可以用作逻辑运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
2) &&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
3) &可以用作位运算,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
2.不用中间变量交换 a,b的值(有多种方法,这里只介绍异或法)
int a=3, b=5;
a ^= b;
b ^= a;
a ^= b;
System.out.println(a); // 5
System.out.println(b); // 3
3. 判断一个数是基数还是偶数
// 将数值与1做按位与操作,如果结果是1则为基数,为0则为偶数
for(int i=0; i<100; i++){
if((i & 1) == 1){//把i转换成二进制按位比较
System.out.println(i+"是基数");
}else{
System.out.println(i+"是偶数");
}
}
4. 用最有效率的方法算出4乘以17等于多少
System.out.println(17 << 2); // 右移两位,相当于乘以4
如果遇到这种题目,看次方和二进制,如这题的4是2的2次方,17的二进制是10001,向右移两位之后是1000100,按1248的算法算回来之后就是68.
在比如8*3,按次方是8是2的3次方,那就是右移3位,那么3的二进制是11,移位之后是11000,算回来之后是不是24呢。
5. 判断一个数n是不是2的幂
int n = 64;
//这里使用的就说按位与,如64的二进制是1000000,而减一之后二进制是0111111,与之后的结果会是0
if((n & (n - 1)) == 0){
System.out.println(n + "是2的幂");
}else{
System.out.println(n + "不是2的幂");
}