4.2 Java运算符

一元运算符

因为操作数是一个,故称为一元运算符,一元运算符都为右结合

运算符含义例子
-改变数值的符号,取反-x(-1*x)
~逐位取反,属于位运算符~x
++自加1x++
自减1x–

-号为数字去反

~号为逐位取反,属于位运算符

++在前,先自加后运算,++在后先运算再自加,–同理

注意: 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. 如何计算二进制

    通过计算我们知道,1的二进制原码为:00000001

    那-1该如何表示?

    将正数二进制做取反操作,再在最低位+1

  2. 符号位

    二进制最高位为符号位,0表示正数,1表示负数

  3. 反码

    反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

  4. 补码

    补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

    计算机如何计算1-1?

    00000001

    11111111

    多余的最高位将舍弃

探讨:有原码就行了,为什么还需要反码和补码?

反码是用来算补码的,原码和补码都是用在CPU的基本运算里面

所以补码的设计目的是:

  • 使符号位能与有效值部分一起参加运算,从而简化运算规则.
  • 使减法运算转换为加法运算,进一步简化计 算机中运算器的线路设计

位运算符

位运算符是来操作整数基本数据类型中的单个“比特”(bit),即二进制位,位运算符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果

位运算符来源于C语言面向底层的操作,在这种操作中经常需要直接操作硬件,设置硬件寄存器内的二进制位。Java的设计初衷是为了嵌入电视机机顶盒,所以种面向底层的操作仍被保留了下来。

位与 &

按位“与”操作符,如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0.

ABA&B
111
100
010
000
5&4        
	5的二进制是  0000 0000 0000 0101        
	4的二进制是  0000 0000 0000 0100        
	
    进制结果是   0000 0000 0000 0100  
    转为十进制是4
位或 |

位“或”操作符,如果两个数的二进制,相同位数有一个是1,则该位结果是1,否则是0

ABA | B
111
101
011
000
5 | 4
	5的二进制是  0000 0000 0000 0101
	4的二进制是  0000 0000 0000 0100
	
    进制结果是   0000 0000 0000 0101  
    转为十进制是5
异或 ^

按位“异或”操作符,如果两个数的二进制,相同位数只有一个是1,则该位结果是1,否则是0

ABA^B
110
101
011
000
5 ^ 4
	5的二进制是  0000 0000 0000 0101
	4的二进制是  0000 0000 0000 0100
	
    进制结果是   0000 0000 0000 0001 
    转为十进制是1
位非 ~

按位“非”操作符,属于一元操作符,只对一个操作数进行操作,(其他按位操作符是二元操作符)。按位“非”生成与输入位相反的值,——若输入0,则输出1,若输入1,则输出0

A~A
10
01
~5
	5的二进制是  0000 0000 0000 0101
	进制结果是   1111 1111 1111 1010  
	
	转为十进制是 -6

移位运算符

移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数

含义例子
<<左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)x<<3
>>"有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1x>>3
>>>"无符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0x>>>3

在这里插入图片描述

三元运算符

三目运算符是一个特殊的运算符,它的语法形式如下:

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

运算过程:如果布尔表达式的值为true,就返回表达式1的值,否则返回表达式2的值,例如:

int sum=90;
String str=sum<100 ? "失败" : "成功";

赋值运算符

赋值运算符是程序中最常用的运算符

运算符例子含义
+=x+=yx=x+y
-=x-=yx=x-y
*=x*=yx=x*y
/=x/=yx=x/y
%=x%=yx=x%y
>>=x>>=yx=x>>y
>>>=a>>>=yx=x>>>y
<<=a<<=yx=x<<y
&=x&=yx=x&y
|=x|=yx=x|y
^=x^=yx=x^y

课后作业

  • 求出以下结果

    6&36&26|36|26^36^2~6
    
  • 已知代码如下

    int a = 15int b = 2double 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请勿使用程序计算或寻求网络答案

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君哥聊编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值