一元运算符
因为操作数是一个,故称为一元运算符,一元运算符都为右结合
运算符 | 含义 | 例子 |
---|---|---|
- | 改变数值的符号,取反 | -x(-1*x) |
~ | 逐位取反,属于位运算符 | ~x |
++ | 自加1 | x++ |
– | 自减1 | x– |
-号为数字去反
~号为逐位取反,属于位运算符
++在前,先自加后运算,++在后先运算再自加,–同理
注意: a+ ++b和a+++b是不一样的(因为有一个空格)
算术运算符
又称二元运算符,因为运算是由左右两个数字构成
运算符 | 含义 | 例子 |
---|---|---|
+ | 加法运算 | x+y |
- | 减法运算 | x-y |
* | 乘法运算 | x*y |
/ | 除法运算 | x/y |
% | 取模运算(求余运算) | x%y |
这些操作可以对不同类型的数字进行混合运算,为了保证操作的精度,系统在运算过程中会做相应的转化。
attention:数字精度的问题
关系运算符
这些关系运算符同数学中的关系运算符是一致的,其运算结果是boolean类型,也就是只可能返回ture false
运算符 | 含义 | 例子 |
---|---|---|
< | 小于 | x<y |
> | 大于 | x>y |
<= | 小于等于 | x<=y |
>= | 大于等于 | x>=y |
== | 等于 | x==y |
!= | 不等于 | x!=y |
attention:由于计算机内存放的实数与实际的实数存在着一定的误差,如果对浮点数进行 ==(相等)或 !=(不相等)的比较,容易产生错误结果,应该尽量避免。
关系运算符中的"==“和”!="既可以操作基本数据类型,也可以操作引用数据类型。操作引用数据类型时,比较的是引用的内存地址。所以在比较非基本数据类型时,应该使用equals方法
逻辑运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,用来判断程序中的表达式是否成立,判断的结果是 true 或 false
结果为 boolean 型的变量或表达式可以通过逻辑运算符结合成为逻辑表达式
x>0 && x<=100 //第一行语句
y%4==0 || y%3==0 //第二行语句
!(x>y) //第三行语句
逻辑运算符存在短路现象
二进制计算(符号位,补码、反码)
-
如何计算二进制
通过计算我们知道,1的二进制原码为:00000001
那-1该如何表示?
将正数二进制做取反操作,再在最低位+1
-
符号位
二进制最高位为符号位,0表示正数,1表示负数
-
反码
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
-
补码
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
计算机如何计算1-1?
00000001
11111111
多余的最高位将舍弃
探讨:有原码就行了,为什么还需要反码和补码?
反码是用来算补码的,原码和补码都是用在CPU的基本运算里面
所以补码的设计目的是:
- 使符号位能与有效值部分一起参加运算,从而简化运算规则.
- 使减法运算转换为加法运算,进一步简化计 算机中运算器的线路设计
位运算符
位运算符是来操作整数基本数据类型中的单个“比特”(bit),即二进制位,位运算符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果
位运算符来源于C语言面向底层的操作,在这种操作中经常需要直接操作硬件,设置硬件寄存器内的二进制位。Java的设计初衷是为了嵌入电视机机顶盒,所以种面向底层的操作仍被保留了下来。
位与 &
按位“与”操作符,如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0.
A | B | A&B |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
例 5&4
5的二进制是 0000 0000 0000 0101
4的二进制是 0000 0000 0000 0100
进制结果是 0000 0000 0000 0100
转为十进制是4。
位或 |
位“或”操作符,如果两个数的二进制,相同位数有一个是1,则该位结果是1,否则是0
A | B | A | B |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
例 5 | 4
5的二进制是 0000 0000 0000 0101
4的二进制是 0000 0000 0000 0100
进制结果是 0000 0000 0000 0101
转为十进制是5
异或 ^
按位“异或”操作符,如果两个数的二进制,相同位数只有一个是1,则该位结果是1,否则是0
A | B | A^B |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
例 5 ^ 4
5的二进制是 0000 0000 0000 0101
4的二进制是 0000 0000 0000 0100
进制结果是 0000 0000 0000 0001
转为十进制是1
位非 ~
按位“非”操作符,属于一元操作符,只对一个操作数进行操作,(其他按位操作符是二元操作符)。按位“非”生成与输入位相反的值,——若输入0,则输出1,若输入1,则输出0
A | ~A |
---|---|
1 | 0 |
0 | 1 |
例 ~5
5的二进制是 0000 0000 0000 0101
进制结果是 1111 1111 1111 1010
转为十进制是 -6
移位运算符
移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数
符 | 含义 | 例子 |
---|---|---|
<< | 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) | x<<3 |
>> | "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1 | x>>3 |
>>> | "无符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0 | x>>>3 |
三元运算符
三目运算符是一个特殊的运算符,它的语法形式如下:
布尔表达式?表达式1:表达式2
运算过程:如果布尔表达式的值为true,就返回表达式1的值,否则返回表达式2的值,例如:
int sum=90;
String str=sum<100 ? "失败" : "成功";
赋值运算符
赋值运算符是程序中最常用的运算符
运算符 | 例子 | 含义 |
---|---|---|
+= | x+=y | x=x+y |
-= | x-=y | x=x-y |
*= | x*=y | x=x*y |
/= | x/=y | x=x/y |
%= | x%=y | x=x%y |
>>= | x>>=y | x=x>>y |
>>>= | a>>>=y | x=x>>>y |
<<= | a<<=y | x=x<<y |
&= | x&=y | x=x&y |
|= | x|=y | x=x|y |
^= | x^=y | x=x^y |
课后作业
-
求出以下结果
6&3,6&2,6|3,6|2,6^3,6^2,~6
-
已知代码如下
int a = 15;int b = 2;double c = 2;
请求出:
a/b,a%b,a/c,a%c
的结果 -
求出以下结果
int x = 10; int a= x+ x++; //请输出a和x的值 int b= x+ ++x; //请输出b和x的值
-
不采用第三变量交换变量a和b的值(企业面试题)
//写出三种方式 int a = 2; int b=3;
attention:请勿使用程序计算或寻求网络答案