【JAVA基础篇】运算符

一、表达式

表达式由运算符和操作数组成

例如: 5

num1

num1+num2

sum=num1+num2

二、运算符分类

算数运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、位运算符

三、算数运算符

 

四、赋值运算符

格式:变量=表达式

例如:int n=3;//将3赋值给变量n

注意:赋值运算符是从右往左运算!赋值运算符的左边不能是常量!

复合赋值运算符

 

五、关系运算符

比较运算符用于判断两个数据的大小,如大于
比较的结果是一个布尔值

六、逻辑运算符

短路运算符:&&和||,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值

七、条件运算符

Java中的条件运算符是三目运算符

语法:布尔表达式?表达式1:表达式2

八、位运算符

操作二进制位,&,|,<<、>>、>>>

九、运算符优先级

优先级

运算符

结合性

1

() [] .

从左到右

2

! +(正)  -(负) ~ ++ --

从右向左

3

* / %

从左向右

4

+(加) -(减)

从左向右

5

<< >> >>>

从左向右

6

< <= > >= instanceof

从左向右

7

==   !=

从左向右

8

&(按位与)

从左向右

9

^

从左向右

10

|

从左向右

11

&&

从左向右

12

||

从左向右

13

?:

从右向左

14

= += -= *= /= %= &= |= ^=  ~=  <<= >>=   >>>=

从右向左

ps:&、|、^这三个运算符在操作数分别是数值类型和布尔类型的时候,表示的含义分别是按位与、按位或、按位异或和逻辑与、逻辑或、逻辑异或。上面的表格我其实没有标识出来是按位还是逻辑,如果有大佬知道优先级的话麻烦在下方评论!

十、位运算符的使用

共同特性:先将操作数转换成二进制,然后按照二进制位做运算,移位运算符如果超出二进制位的部分丢弃

10.1、<<左移运算符

含义:使指定值的所有位都左移规定的次数

语法格式:value << num

规则:

  1. 低位补0
  2. 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33-32=1位
  3. 当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。

10.2、>>右移运算符

含义:使指定值的所有位都右移规定的次数

语法格式:value >> num

规则:

  1. 高位补符号位,即正数高位补0,负数高位补1
  2. 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33-32=1位
  3. 当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。

10.3、>>>无符号右移运算符

语法格式:value >>> num

规则:

  1. 忽视符号位,高位补0
  2. 当无符号右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。

10.4、示例代码

package org.cc.javase;
/**
 * 位运算符示例
 * @author cc
 *
 */
public class BitOperator {
	private static int a = 60;//0011 1100
	private static int b = 13;//0000 1101
	private static int c = -116;
	public static void main(String[] args) {
		//Integer.toBinaryString方法:若高位有连续的0,则高位不显示
//		yu(a,b);//两个正数做与运算
//		yu(a,c);//正负数做与运算,结果一定是一个正数
//		huo(a,b);//两个正数做或运算
//		yh(a,b);//两个正数做异或运算
//		qf(a);//正数做取反运算
//		yy(b,2);//正数右移两位
//		yy(c,2);//负数右移两位
//		zy(b,2);//正数左移两位
//		zy(c,2);//负数左移两位
//		yy1(c,2);//负数无符号右移两位
	}
	
	/**
	 * & 与运算
	 * @param a
	 * @param b
	 */
	private static void yu(int a,int b){
		System.out.println("操作数a:"+complement0(a));
		System.out.println("操作数b:"+complement0(b));
		System.out.println("操作结果"+complement0(a&b));
		System.out.println(a&b);
	}
	
	/**
	 * | 或运算
	 * @param a
	 * @param b
	 */
	private static void huo(int a,int b){
		System.out.println("操作数a:"+complement0(a));
		System.out.println("操作数b:"+complement0(b));
		System.out.println("操作结果:"+complement0(a|b));
		System.out.println(a|b);
	}
	
	/**
	 * ^ 异或运算
	 * @param a
	 * @param b
	 */
	private static void yh(int a,int b){
		System.out.println("操作数a:"+complement0(a));
		System.out.println("操作数b:"+complement0(b));
		System.out.println("操作结果:"+complement0(a^b));
		System.out.println(a^b);
	}
	
	/**
	 * ~ 取反
	 * @param a
	 */
	private static void qf(int a){
		System.out.println("操作数a:"+complement0(a));
		System.out.println("操作结果:"+complement0(~a));
		System.out.println(~a);
	}
	
	/**
	 * >> 带符号右移
	 * @param a
	 */
	private static void yy(int a,int bitNum){
		System.out.println("操作数a:"+complement0(a));
		System.out.println("操作结果:"+complement0(a>>bitNum));
		System.out.println(a>>bitNum);
	}
	
	/**
	 * << 带符号左移
	 * @param a
	 */
	private static void zy(int a,int bitNum){
		System.out.println("操作数a:"+complement0(a));
		System.out.println("操作结果:"+complement0(a<<bitNum));
		System.out.println(a<<bitNum);
	}
	
	/**
	 * >>> 不带符号右移
	 * @param a
	 */
	private static void yy1(int a,int bitNum){
		System.out.println("操作数a:"+complement0(a));
		System.out.println("操作结果:"+complement0(a>>>bitNum));
		System.out.println(a>>>bitNum);
	}
	
	/*
	 * 将高位的0也显示出来 
	 */
	private static String complement0(int number){
		String binaryStr = Integer.toBinaryString(number);
		StringBuffer sb = new StringBuffer();
		if(binaryStr.length()<32){
			int count = 32-binaryStr.length();
			for(int i=0;i<count;i++) sb.append("0");
		}
		return sb.append(binaryStr).toString();
	}
	
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值