Java基础——运算符

运算符

​ 在Java编程语言中,运算符是一个符号,用来操作一个或者多个表达式以生成结果,表达式就是指运算符号与变量或常量组成的语句,运算符所操作的变量/常量成为操作数。
​ 在Java语言中,运算符分为以下几类:
​ 算术运算符、比较运算符、位运算符、赋值运算符以及条件运算符。

1. 算术运算符

算术运算符用在数学表达式中,用法和功能与在数学中的运算一样。Java定义了以下算术运算符:

Java基础——运算符_第1张图片

	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);

2 比较运算符(结果是boolean类型)

比较运算符用在数学表达式中,用法和功能与在数学中的运算一样。Java定义了以下比较运算符:
Java基础——运算符_第2张图片

3 逻辑运算符(结果为boolean类型)

逻辑运算符用在布尔表达式中。布尔运算遵循真值表规则,真值表如下:
Java基础——运算符_第3张图片
在Java中,定义了以下逻辑运算符:
Java基础——运算符_第4张图片
解释:

运算符 解释
&& 逻辑与(短路与),两边同为真结果才为真,第一个错了(短路)不会验证第二个
& 单与,两边都为真,第一个错了也会验证第二个
|| 逻辑或(短路或),两边只要有一个真结果就是真,判断完第一个为真了会短路,停止验证第二个。
| 单或,只要有一个为真,就能执行,判断完第一个为真了会继续判断第二个。
+ 字符串连接
非,非真是假,非假是真
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+"年,是平年");
		}
}
3.1 拓展

​ 当一个&表达式在求值的时候,两个操作数都会被求值,&&更像 是一个操作符的快捷方式。当一个&&表达式求值的时候,先计算第一个操作数,如果它返回true才会计算第二个操作数。如果第一个操作数 取值为fale,第二个操作数就不会被求值

4 位运算符

Java定义的位运算直接对整数类型的位进行操作,这些整数类型包括byte、short、int和long,另外也可以对char类型进行位运算。位运算的真值表如下:

Java基础——运算符_第5张图片

Java定义以下位运算符:
Java基础——运算符_第6张图片

4.1.按位非(NOT)

语法格式:~value1
按位非也叫做补,一元运算符NOT“~”是对其运算数的每一位取反。例如,数字42,它的二进制代码为00101010,则:~00101010=11010101。

4.2.按位与(AND)

语法格式:value1&value2
按位与运算符“&”,如果两个运算数都是1,则结果为1。其他情况下,结果均为零。例如:00101010&00001111=00001010。

4.3.按位或(OR)

语法格式:value1|value2
按位或运算符“|”,任何一个运算数为1,则结果为1。例如:00101010|00001111=00101111

4.4.按位异或(XOR)

语法格式:value1^value2
按位异或运算符“^”,只有在两个比较的位不同时其结果是1,否则,结果是零。

4.5.左移

语法格式:value<<num
这里num指定要移位值value 移动的位数。也就是说,左移运算符<<使指定值的所有位都左移num位。每左移一位,高阶位都被移出(并且丢弃),并用0填充右边。这意味着当左移的运算数是int类型时,每移动1位它的第31位就要被移出并且丢弃;当左移的运算数是long类型时,每移动1位它的第63位就要被移出并且丢弃。例如:11111000<<1=11110000。

4.6.右移

语法格式:value>>num
这里num指定要移位值value移动的位数。也就是说,右移运算符>>使指定值的所有位都右移num位。当值中的某些位被**“移出”时,这些位的值将被丢弃**。右移时,被移走的最高位(最左边的位)由原来最高位的数字补充。例如:11111000>>1=11111100。

4.7.无符号右移

语法格式: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。
*/

5赋值运算符

在这里插入图片描述Java基础——运算符_第7张图片

6 三元运算符

表达式值的类型位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);
	}

7运算符优先级

Java语言规定了运算符的优先级与结合性。

​ 优先级指一个表达式中多个运算符被执行的顺序,在表达式求值时,先按照运算符的优先级别→高到底依次执行。
Java基础——运算符_第8张图片
Java基础——运算符_第9张图片

注:括号用于更改计算表达式的顺序,将首先计算括号内的表达式的任何部分。如果是嵌套括号,则从最里面的一组括号开始计算,然后向外移动,但是在括号里面的表达式仍然使用优先级的规则

你可能感兴趣的:(java)