Java运算符

++ 和 - -

++和- -是面试笔试的一个常考话题,首先可以分为两类,一类是a++(a- -),另一类是++a(- -a).
不管++还是- -都是针对于使用它的变量而言,也就是变量的自加或者自减操作,但两种方式在内存中的运行过程却大不相同,分别画图举例。

  • 当++(- -)在后面时
int a = 1;//先定义一个变量a并且赋值
int b = a++;//在给b变量赋值

在这里插入图片描述

  • 当++(- -)在前面时
int a = 1;
int b = ++a;

在这里插入图片描述
扩展:

int a = 1;
a = a++;//这个a等于多少?
a = ++a;//这个a等于多少?
算数运算符

“+”、“-”、“*”、“/”、“%”(取余)

赋值运算符
  • = :用于赋值操作
  • += :相当于本身先加后面的再赋值到本身。例如:a+=1;–>a = a + 1;
  • -= :相当于本身先减再赋值。
  • /= :相当于本身先除再赋值。
  • *= :相当于本身先乘再赋值。
  • %=:相当于本身先取余再赋值。
    注意:
    1.小数据类型进行赋值运算时可能出现编译错误
	byte x = 1;
	x += 2;//结果为3,虽然是与32bit的“2”进行运算,但是“=”能够将数据进行自动类型转化。
	x = x + 1;
	/*编译报错,
	报错原因是“1”为int类型数据,在进行x + 1操作的时候,比较运算符“+”自动把8bit的x转化成32bit的int类型与32bit的“1”进行加法运算,运算完成后的结果在赋值到8bit的x空间里面。
	虽然对于数据来说,“=”能够进行数据转化,但是对于算式来说这种转化就失效了*/
比较运算符
  • “==”:前后数据相等返回true,否则返回false。
  • “>”:大于号
  • “<”:小于号
  • “!=”:前后不等于返回true,否则返回false。
  • “>=”:大于等于
  • “<=”:小于等于
逻辑运算符
  • &:并且,所有条件都满足返回true,否则返回false
  • |:或者,只要有条件满足就返回true,都不满足返回false
  • !:非,如果本来是true加上!之后改为false,如果本来是false,加上之后改为true
  • ^:异,相同为false,不同为true
  • &&:短路与,当前一个条件不满足就不会执行后一个条件,比单个&效率高
  • ||:短路或,当前一个条件满足就不会在执行后一个条件,比单个|效率高
位运算符
  • & 按位与
int a = 3 & 5;
步骤:
1.先转化为二进制数表示形式
2.竖着按照按照对应位置进行&计算(1代表true,0代表false)
3.将计算后的二进制数转化为十进制数
00000011 -->3
00000101 -->5
00000001 -->结果为1
  • | 按位或
int a = 3 | 5;
步骤:
	1.先转化为二进制数表示形式
	2.竖着按照按照对应位置进行 | 计算(1代表true,0代表false)
	3.将计算后的二进制数转化为十进制数
	00000011 -->3
	00000101 -->5
	00000111 -->结果为7
  • ^ 按位异或
int a = 3 ^ 5;
步骤:
	1.先转化为二进制数表示形式
	2.竖着按照按照对应位置进行 ^ 计算(1代表true,0代表false)
	3.将计算后的二进制数转化为十进制数
	00000011 -->3
	00000101 -->5
	00000110 -->结果为6
  • ~ 按位取反

补充知识:
对于十进制数“6”和“-6”有以下三种二进制数表示形式

.原码:
00000000 00000000 00000000 00000110 ->6
10000000 00000000 00000000 00000110 ->-6
反码:
00000000 00000000 00000000 00000110 ->6
11111111 11111111 11111111 11111001 ->-6是原码的二进制数符号保持不变,其余位按位取反
补码:
00000000 00000000 00000000 00000110 ->6
11111111 11111111 11111111 11111010 ->-6是反码+1
计算机中不管是存储正数还是负数,存储的形式都是以补码的形式存储

注意:反码是一种数据的表现形式,取反是一个计算过程(每个位置都取反)
int a = ~3;
步骤:
	00000011 -->3
	11111100 -->结果为124
  • << 按位左位移
int a = 6 << 2;
步骤:
注意这里的二进制是补码类型
	00000000 00000000 00000000 00000110 -->6 
	乘以2的位移次幂
	00000000 00000000 00000000 00011000 -->结果为24
  • “>>” 按位右位移
int a = 6 >> 2;
步骤:
注意这里的二进制是补码类型
	00000000 00000000 00000000 00000110 -->6
	除以2的位移次幂(保留符号位,如果是负数就填1,正数就填0)
	00000000 00000000 00000000 00000001 -->结果为1,
  • ">>> " 按位右位移(无符号)
int a = -6 >>> 2;
步骤:
注意这里的二进制是补码类型
	11111111 11111111 11111111 11111010 --> -6
	乘以2的位移次幂(不保留符号位,移动过程一律填0)
	0011111111 11111111 11111111 111110 -->结果为1073741822
三目运算符(也叫三元运算符)

格式为:
条件表达式?表达式1:表达式2
当条件表达式为true则执行表达式1,如果为false则执行表达式2.
举例:

/**在这个方法里面,先比较参数a>b,然后将谁比较大这个字符串放到result,最后输出*/
public void test(int a,int b){
	String result = a>b?a+"比较大":b+"比较大";
	System.out.println(result);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值