在Java编程语言中,运算符是一个符号,用来操作一个或者多个表达式以生成结果,表达式就是指运算符号与变量或常量组成的语句,运算符所操作的变量/常量成为操作数。
在Java语言中,运算符分为以下几类:
算术运算符、比较运算符、位运算符、赋值运算符以及条件运算符。
算术运算符用在数学表达式中,用法和功能与在数学中的运算一样。Java定义了以下算术运算符:
public static void main(String[] args) {
int a = 50;
int b = 15;
int c,d,e,f,g;
c = a + b;
System.out.println("c = "+c);//加法运算
d = a - b;
System.out.println("d = "+d);//减法运算
e = a * b;
System.out.println("e = "+e);//乘法运算
f = a / b;
System.out.println("f = "+f);//除法运算
g = a %b;
System.out.println("g = "+g);//取余(取模)运算
System.out.println("a后自加"+a++);//a后自加50
//后自加是先输入原来的数,输出完后自加1
System.out.println("a后自加后:"+a);//a后自加后:51
System.out.println("a先自加"+ ++a);//a先自加52
//-->在上一个后自加 +了一个1,在后面先自加 +了一个1,一共加了2次<--
System.out.println("a后自减前"+a);//a后自减前52
System.out.println("a后自减"+a--);//a后自加52
//后自减先输出后,在进行减1
System.out.println("a后自减后:"+a);//a后自加后:51
System.out.println("a先自减"+ --a);//a先自加50
//-->在上一个后自减 -了一个1,在后面先自减 -了一个1,一共减了2次<--
}
int a = 50;
int b = 15;
f = a / b;
System.out.println("f = "+f);//除法运算
//输出结果为3---->50/15=3 ????
注:除法运算中,结果取整是指取算术运算结果的整数部分,不四舍五入!!!
//从一个百位数取中间数字!!
int h = 459;
System.out.println("h的百位是:"+h/100);
System.out.println("h的十位是:"+(h/10)%10);
System.out.println("h的十位是:"+(h%100)/10);
System.out.println("h的个位是:"+(h%100)%10);
比较运算符用在数学表达式中,用法和功能与在数学中的运算一样。Java定义了以下比较运算符:
逻辑运算符用在布尔表达式中。布尔运算遵循真值表规则,真值表如下:
在Java中,定义了以下逻辑运算符:
解释:
运算符 | 解释 |
---|---|
&& | 逻辑与(短路与),两边同为真结果才为真,第一个错了(短路)不会验证第二个 |
& | 单与,两边都为真,第一个错了也会验证第二个 |
|| | 逻辑或(短路或),两边只要有一个真结果就是真,判断完第一个为真了会短路,停止验证第二个。 |
| | 单或,只要有一个为真,就能执行,判断完第一个为真了会继续判断第二个。 |
+ | 字符串连接 |
! | 非,非真是假,非假是真 |
public static void main(String[] args) {
//输入年号,判断是否是闰年。两个条件:
//1、能被4整除,并且不能被100整除
//2、或者能被400整除判断平年闰年
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = sc.nextInt();
//方法一
if(year/4==0 && year/100!=0 ||year/400==0) {
System.out.println("您输入的年份是:"+year+"年,是润年");
}else {
System.out.println("您输入的年份是:"+year+"年,是平年");
}
}
当一个&表达式在求值的时候,两个操作数都会被求值,&&更像 是一个操作符的快捷方式。当一个&&表达式求值的时候,先计算第一个操作数,如果它返回true才会计算第二个操作数。如果第一个操作数 取值为fale,第二个操作数就不会被求值
Java定义的位运算直接对整数类型的位进行操作,这些整数类型包括byte、short、int和long,另外也可以对char类型进行位运算。位运算的真值表如下:
语法格式:~value1
按位非也叫做补,一元运算符NOT“~”是对其运算数的每一位取反。例如,数字42,它的二进制代码为00101010,则:~00101010=11010101。
语法格式:value1&value2
按位与运算符“&”,如果两个运算数都是1,则结果为1。其他情况下,结果均为零。例如:00101010&00001111=00001010。
语法格式:value1|value2
按位或运算符“|”,任何一个运算数为1,则结果为1。例如:00101010|00001111=00101111
语法格式:value1^value2
按位异或运算符“^”,只有在两个比较的位不同时其结果是1,否则,结果是零。
语法格式:value<<num
这里num指定要移位值value 移动的位数。也就是说,左移运算符<<使指定值的所有位都左移num位。每左移一位,高阶位都被移出(并且丢弃),并用0填充右边。这意味着当左移的运算数是int类型时,每移动1位它的第31位就要被移出并且丢弃;当左移的运算数是long类型时,每移动1位它的第63位就要被移出并且丢弃。例如:11111000<<1=11110000。
语法格式:value>>num
这里num指定要移位值value移动的位数。也就是说,右移运算符>>使指定值的所有位都右移num位。当值中的某些位被**“移出”时,这些位的值将被丢弃**。右移时,被移走的最高位(最左边的位)由原来最高位的数字补充。例如:11111000>>1=11111100。
语法格式:value>>>num
这里num指定要移位值value移动的位数。也就是说,无符号右移运算符>>>使指定值的所有位都右移num位。当值中的某些位被“移出”时,这些位的值将被丢弃。右移时,被移走的最高位(最左边的位)由0补充。例如:11111000>>>1=01111100。
public static void main(String[] args) {
int num1 = 9;
int num2 = 7;
int fei = ~num1; //非
int huo = num1 | num2; //或
int yu = num1 & num2; //与
int yiHuo = num1 ^ num2;//异或
int youYi = num1 >>1; //右移一位
int zuoYi = num1 <<1; //左移一位
int xYouYi = num1 >>>1; //无符号右移一位
System.out.println(fei);//-10
System.out.println(huo);//15
System.out.println(yu);//1
System.out.println(yiHuo);//14
System.out.println(youYi);//4
System.out.println(zuoYi);//18
System.out.println(xYouYi);//4
}
/**
*与,相当于乘,全1得1,有0全0;
*或,相当于加,有1得1,全0位0;
*非,取反,0与1互换;
*异或,相同取0,不同取1。
*/
表达式值的类型位boolean类型,若表达式的值为真,则返回e1的值;表达式的值为假,则返回e2的值。
利用三元运算符判断3个数的最大值与最小值:
public static void main(String[] args) {
int a,b,c,max,min;
Scanner sc = new Scanner(System.in);
System.out.println("请输入三个数字,来比较出最大值与最小值:");
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
System.out.println("输入的三个数分别位:"+a+"和"+b+"和"+c);
max = a>b ? (max = a>c ? a:c) : (max = b>c ? b : c );
//如果a>b,执行(max = a>c ? a:c)。如果ac ? b : c )
System.out.println("最大值位:"+max);
//(max = a>c ? a:c)-->如果a>c,给max赋值a,如果a
//(max = b>c ? b : c )-->如果b>c,给max赋值a,如果b
min = a<b ? (min = a<c ? a:c) : (min = b<c ? b : c );
System.out.println("最小值位:"+min);
}
Java语言规定了运算符的优先级与结合性。
优先级指一个表达式中多个运算符被执行的顺序,在表达式求值时,先按照运算符的优先级别→高到底依次执行。
注:括号用于更改计算表达式的顺序,将首先计算括号内的表达式的任何部分。如果是嵌套括号,则从最里面的一组括号开始计算,然后向外移动,但是在括号里面的表达式,仍然使用优先级的规则。