【知晓的丧day拯救计划】java基础学习笔记4 运算符

笔记来自2019求知讲堂零基础Java入门编程视频教程 https://www.bilibili.com/video/av76235341

算数运算符

运算符运算举例运算结果
+正号a=3;+33
-负号a=4;-4-4
+1+23
-4-13
*2*36
/13/52
%取模(取余)13%53
++自增(前),先运算后取值
自增(后)先取值后运算
a=2;b=++a;
a=2;b=a++;
a=3;b=3;
a=3;b=2;
- -自减(前),先运算后取值
自减(后)先取值后运算
a=2;b=- -a;
a=2;b=a- -;
a=1;b=1;
a=1;b=2;
+字符串连接“he”+“llo”“hello”

注:
1.整数间的二元运算规则:两个操作数有一个为long,结果则为long。只要没有long,结果均为int,即使操作数全是byte或short也一样。

int a = 3;
long b = 4;
int c = a + b; //报错
long c = a + b;//正确写法

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2; //报错

2.浮点数间的二元运算规则,两个操作数有一个为double,则结果为double;两个操作数均为float,结果才是float。

3.整数与整数做除法运算默认是取整的,如果需要精确的结果,不仅结果要用浮点型,其中一个数字也要做强制转换为浮点型,或者直接在整数后加.0

double a=13/5;//运算结果:2.0
double a=(double)13/5;//运算结果:2.6
double a=13.0/5;//运算结果:2.6

4.取模符号左侧是负数则结果是负数,取模符号右侧是负数结果依然是正数

System.out.println(13%-5);//运算结果:3
System.out.println(-13%5);//运算结果:-3
System.out.println(-13%-5);//运算结果:-3

5.取模运算的结果不一定总是整数

System.out.println(13.5%5);//运算结果:3.5

6.char类型和char类型(或其他数字类型)做 "+"运算,是转换为ASCII码计算的,和字符串进行 "+"运算时,是进行字符串连接

System.out.println('*'+'\t'+'*');//运算结果:93
System.out.println("*"+'\t'+'*');//运算结果:*	*

赋值运算符

" = ":赋值运算符,当两侧数据类型不一致时,可以使用自动类型转换或强制类型转换原则进行处理。

  • 支持连续赋值
int i0 = 1;
int i1 = 1;
int i2 = 1;
i0 = i1 = i2 = 2;
  • 扩展赋值运算符
运算符
+=i += 2i = i + 2
-=i -= 2i = i - 2
*=i *= 2i = i * 2
/=i /= 2i = i / 2
%=i %= 2i = i % 2

注:
1.字符串可以使用"+=",实际上还是字符串拼接

String str="he";
str+="llo";
System.out.println(str);//运行结果:hello

2.使用扩展赋值运算符的好处在于会把运算结果强制转换为当前变量的类型

short s = 2;
s = s + 2;//cannot convert from int to short
s += 2;//正常运行,相当于s = (short)(s + 2);

比较运算符(关系运算符)

比较运算符的结果是Boolean类型的值,"==“不要误写成”="

运算符运算举例运算结果
==等于4==5false
!=不等于4!=5true
<小于4<5true
>大于4>5false
<=小于等于5<=5true
>=大于等于4>=5false

注:

  1. == 和 !=是所有数据类型都可以使用的(包括基本数据类型和引用数据类型),<、>、<=、>=仅针对数值类型(整型、浮点型、char)。

逻辑运算符

逻辑运算符是用于布尔值之间的计算,运算结果是布尔值

&|!^&&||
逻辑与逻辑或逻辑非逻辑异或短路与短路或
a,b都成立为true,否则都为falsea,b中至少有一个成立则为true取反a,b中一个成立
一个不成立
aba&ba|b!aa^b
truetruetruetruefalsefalse
truefalsefalsetruefalsetrue
falsetruefalsetruetruetrue
falsefalsefalsefalsetruefalse

注:
1."&""|“和”&&""||"的区别——短路
"&“和”|“在任何情况下都会对两侧的布尔表达式进行判断,但”&&“和”||“会先判断左边的表达式,如果可以得出结果则省略对右边的判断。具体来说,使用”&&“时先判断左侧,若为true则继续对右侧进行判断,若为false则直接判断结果为false;同理,使用”||"时若左侧为false则继续对右侧进行判断,若为true则直接判断结果为true。

int k=1;
int l=1;
System.out.println(1==2 && 2==++k);//运算结果false
System.out.println(1==2 & 2==++l);//运算结果false
System.out.println("k="+k);//运算结果k=1,可以看出&&右侧没参与运算
System.out.println("l="+l);//运算结果l=2

2.逻辑运算符用于连接布尔表达式,在Java中不可以写成3<x<6,而要写成x>3 && x<6。

3.异或(^)与或(|)的区别,异或追求的是"异",两侧要不同才为true。

位运算符

位运算符是直接对二进制进行运算

二进制

二进制是计算机技术中广泛采用的一种数制,用0和1来表示数字。类比于十进制的“逢十进一”,二进制的进位规则是“逢二进一”。

1.二进制转十进制

  • 正整数
    除二取余→倒序排列→高位补零
    在这里插入图片描述
    ①以29为例,除二取余直到结果为0,获得的余数为10111
    ②然后将余数倒叙排列,得到29的二进制表示 11101
    ③由于Java中的数据都有固定位数,所以不足的位数以0补齐,假设需要8位,那么转换结果就是00011101

  • 负整数
    对应正整数转二进制→取反→加1
    ①以-29为例,29的二进制表示为00011101
    ②取反,为11100010
    ③加一,最终-29的二进制表示为 11100011

  • 小数
    小数部分乘二取整数部分→直到小数部分为0或位数足够→整数部分顺序排列
    整数部分正常计算
    连接整数部分和小数部分
    在这里插入图片描述
    ①以 -29.125 为例
    ②整数部分29的二进制表示为11101
    ③小数部分按图中方式乘以二,取结果的整数部分顺序排列,得到0.001
    ④连接整数和小数部分,-29.125 的二进制表示为 11101.001

2.十进制转二进制

  • 正整数
    从右到左每一位分别乘以20、21、22……,然后相加
    .
    以11101(29)为例:
    1×20+0×21+1×22+1×23+1×24=1+0+4+8+16=29

  • 负整数
    转换成对应正整数再计算

  • 小数
    从左到右每一位分别乘以20、2-1、2-2……,然后相加
    .
    以0.001为例
    0×20+0×2-1+0×2-2+1×2-3=0+0+0+0.125=0.125

3.二进制的正负转换
正数二进制→反码(逐位取反)→补码(即加1)→负数二进制
负数二进制→减1→反码→正数二进制


位运算符

运算符运算举例运算过程
<<左移3<<2=3*2*2=12m<<n=m*2n
>>右移3>>1=3/2=1m>>n=m*2-n
>>>无符号右移3>>>1=1
-3>>>1=214748364
见下方
&与运算6&3=2逐位与()
(1&1=1,1&0=0,0&0=0)
|或运算6|3=7逐位或
(1|1=1,1|0=1,0|0=0)
^异或运算6^3=5逐位异或
(1&1=0,1&0=1,0&0=0)
~反码~6=-7逐位取反
(~1=0,~0=1)

1.左移:二进制序列整体向左移动相应位数,右面补零,左边超出部分删除
   |0000 1100|       →12
 |00 001100|00       →12<<2 = 48
 
2.右移:二进制序列整体向右移动相应位数,正数左面补零,负数左面补1,右边超出部分删除
  |00001100|        →12
   000|00001100 |    →12>>3 = 1
   
  |00001100|        →12
  |11110100|        →-12
   111|11110100 |    →-12>>3 = -2
   
   
3.无符号右移:右移时不论正负,左侧都补0(正数的无符号右移结果和右移相同,负数的无符号右移结果是一个正数,因为计算机是通过二进制数字首位判断正负的,首位是1为负数,首位是0为正数)。

|0000 0000 0000 0000 0000 0000 0000 1100|     →12
|1111 1111 1111 1111 1111 1111 1111 0100|     →-12
000 |1111 1111 1111 1111 1111 1111 1111 0100 |     →-12>>>3=536870910

4.与、或、异或、反码

(6)1000000110
(3)1000000011
6&300000010(2)10
6|300000111(7)10
6^300000101(5)10
~611111001(-7)10

三元运算符

(条件表达式)? 表达式1: 表达式2;
条件表达式为true:运算结果为表达式1;
条件表达式为false:运算结果为表达式2;

  • 三元运算符可以嵌套使用
// 获取三个数中的较大数?
int i = 1;
int j = 9;
int k = 7;
int max = i > j ? (i > k ? i : k) : (j > k ? j : k);

运算符的优先级

优先级运算符结合性(同一等级优先级)
1()  []  .(方法调用)从左到右
2!  +(正)  -(负)  ~  ++  - -从右到左
3*  /  %从左到右
4+(加)  -(减)从左到右
5<<  >>  >>>从左到右
6<  <=  >  >=  instanceof从左到右
7==  !=从左到右
8&从左到右
9^从左到右
10|从左到右
11&&从左到右
12||从左到右
13?:从右到左
14=  +=  -=  *=  /=  &=  |=
^=  ~=  <<=  >>=  >>>=
从右到左

注:
1.一般会使用()改变优先级以及提高程序可读性
2.注意& 、|、 ^的使用场景是位运算还是逻辑运算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值