javaSE-运算符

原码,反码,补码

原码:二进制表示法,最高位是符号位,"0"表示正,"1"表示负,其余是数值位

反码:正数的反码与原码相同,负数的反码就是对其原码逐一取反,符号位除外

补码:正数的补码与原码相同,负数的补码是在反码的末尾加1

注意:我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式保存的。

一.算数运算符

1.种类

符号名称
+
-
*
/
%取余
++自增
自减

2.i++和i–的区别

i++:先赋值后加1

++i:先加1后赋值

只要记住程序是从左往右运行的就行

3.优先级

优先级:单目>双目>三目

单目:只有一个操作数,比如++和–

双目:1+2

4.注意

0.1+0.2不等于0.3

所以千万不要使用小数进行比较

二.关系运算符

1.分类

符号名称
>大于
>=大于等于
<小于
<=小于等于
==等于
!=不等于

2.注意

==比较的是基本类型的大小,而引用类型是比较地址

==是比较,=是赋值

三.位运算符

1.分类

符号名称解释
&位与两边都是true,结果才是true
|位或两边一个是true,结果就是true
!位非取反
^位异或两边不一样,结果就是true
~按位非将内存中的二进制位逐一取反(注意内存中保存的是二进制的补码)
>>右移运算符(考虑符号位)二进制向右移动
<<左移运算符(考虑符号位)二进制向左移动
>>>右移运算符(不考虑符号位)二进制向右移动
&&且,短路与和 & 一样,如果第一个是false,第二个就不执行了, 但是 & 第二个也会执行
||或,短路或如果第一个是true,第二个就不执行了, 但是 |第二个会执行

2.>>和>>>详解

>>和<<

符号位不变

8>>2
    0000 1000
    运算后: 0000 0010
    结果:2
面试经常问的就是如何计算23次方
    result = 2<<2;
	因为是直接操作内存中的2进制数,所以会比较快
8<<2
    运算后:0010 0000
-1<<2
    -1的原码:1000 0001
        反码:1111 1110
        补码:1111 1111(内存中保存的就是补码)
    <<运算后:1111 1100
        反码:1111 1011
        原码:1000 0100
        结果:-4
-1>>2
    -1的原码:1000 0001
        反码:1111 1110
        补码:1111 1111(内存中保存的就是补码)
    >>运算后:1111 1111
        结果没有变

规律:

符号位不变,移动其他位

>>>

符号位变

8>>>2
    补码:0000 1000
    >>>:0000 0010
-128>>>2
    -128的原码:1000 0000
        反码:0111 1111
        补码:1000 0000(内存中保存的就是补码) 
    >>>运算后:1110 0000

注意没有<<<

注意:以上的都是模拟8位2进制数来计算的,实际上-128没法表示,如果你会的话评论下面教教我

四.赋值运算符

符号解释
=把左边的值赋值给右边
+=i+=2等价于i = i + 2
-=i-=2等价于i = i - 2
*=i*=2等价于i = i * 2
/=i/=2等价于i = i / 2
%=i%=2等价于i = i % 2

注意:

byte b = 2;
b = (int)(b + 2);//需要强转
b += 2;//不需要强转

五.字符串连接符

"+"号既是数值运算符号也是字符串的拼接符号

String str = "hello";
int a = 10;
str = str + a;//str会变成hello10

六.三目运算符

语法 : boolean表达式 ? 真语句 : 假语句;

int i = 0;
// 需求 : 如果为真 给变量i 赋值1,否则赋值 11
i =  2<3 ? 1 : 11;

七.优先级

以下优先级由高到低

运算符分类结合顺序运算符
分隔符左结合.[]();,
一元运算符右结合! ++ – - ~
算术运算符左结合* / % + -
移位运算符左结合<< >> >>>
关系运算符左结合< > <= >= instanceof == !=
逻辑运算符左结合! && ||~ & |^
三目运算符右结合布尔表达式?表达式1:表达式2
赋值运算符右结合= *= /= %= += -= <<= >>= >>>= &= *= |=
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Antgeek

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

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

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

打赏作者

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

抵扣说明:

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

余额充值