本篇主要介绍内容如下:
- 运算符
- 表达式
- 原码,反码和补码
运算符和表达式
定义1:运算符是对字面量或变量操作的符号
定义2:表达式是通过运算符连接字面量或变量的并且符合Java语法的式子。
运算符分类 | 符号 |
---|---|
算术运算符 | + - * / % |
自增自减运算符 | ++ – |
赋值运算符 | =、+=、-=、 *= 、/=、 %= |
关系运算符 | == != > >= < <= |
逻辑运算符 | &(并且)、 |(或者)、 &&(短路并且)、||(短路或者)、 ^(异或)、 !(取反) |
三元运算符 | ?: |
其他运算符 | &(按位与)、 |(按位或)、 <<(左移)、 >>(右移)、 >>>(无符号右移) |
算术运算符
- 只有整数参与运算,结果只会是整数
- 浮点数参与运算,结果可能不准确
- 不同的数值类型参与算术运算,取值范围小数值类型会隐式转换为取值范围大的数值类型,然后参与运算
- byte,short,char参与算术运算的时候,会先转换成int,然后参与运算
- 数值类型取值大小:byte < short < int < long < float < double
- 当取值范围大的数值类型转换成取值范围小的数值类型,需要强制转换,强制转换可能会发生错误
- 字符串 + 数据类型,是拼接操作,不是算术运算
- 字符参与算术运算,字符会查询ASCII码表找到对应的数值后,然后参与运算
自增自减运算符
++(自变量+1)、–(自变量-1)
- 后加加 参与运算时,先用后加
- 先加加 参与运算时,先加后用
赋值运算符
=、+=、-=、 *= 、/=、 %=
注意:+=、-=、 *= 、/=、 %=在运算的隐藏执行了强转。
例子: short s = 10; s+=1; => s = (short)(s+1);
关系运算符
== != > >= < <= 返回值为boolean类型,true/false
逻辑运算符
&(并且) |(或者) &&(短路并且) ||(短路或者) ^(异或) !(取反)
其中最常用的是**&&**,||, !,短路与,短路或具有短路效果
三元运算符
三元运算符的表达式结果必须要被接收或打印。
关系表达式?表达式1:表达式2; // 关系表达式为真,返回表达式1的结果,为假,返回表达式2的结果。
其他的运算符
- &(按位与) |(按位或) <<(左移) >>(右移) >>>(无符号右移)
- 按位与是都为1,才为1
- 按位或是有1,就为1
- 左移是低位补零,移动一位就乘以2
- 右移是符号位不变
- 无符号右移是符号位补零
原码,反码,补码
- 正数的原码,反码,补码是相同的
- 负数的反码是原码除符号位其他位取反,补码是反码+1
- 反码最初是为了解决负数的运算,但是运算过程存在误差正负零,然后补码解决了此问题
- 一个字节的情况,-128的补码1000 0000,没有原码和反码
- 原码是计算机展示的十进制数转换成二进制的数字
- 计算机中存储的二进制是补码,因此byte的取值范围是-128~127
- 计算机展示的二机制的原码转换成十进制
- 原码的首位是符号位,其他位是数值位,首位为零时表示正,为一表示负