黄阶低级 - 《 Java 核心》- 3.5 运算符 - 修改0次

1、自增自减运算符

  • 有两种形式,前缀和后缀,前缀先进行加1运算,后缀使用变量原来的值。
int m = 7;
int n = 7;
int a = 2 * ++m;// now a is 16, m is 8
int b = 2 * n++;// now b is 14, n is 8

2、关系和 boolean 运算符

  • 常见的判断相等和不等的运算符。
  • && 和 || 是按照“短路”方式求值的。
System.out.print(2 < 0 && (3 / 0 > 0));// 输出false,不会报错
System.out.print(2 > 0 || (3 / 0 > 0));// 输出true,不会报错

3、位运算符

  • Java 位运算是针对整型数据类型的二进制进行的移位运算
  • & 和 | 运算符不按“短路”方式计算。
System.out.print(2 > 0 & (3 / 0 > 0));// 整数除以0异常
System.out.print(2 > 0 | (3 / 0 > 0));// 假设能运行到这一行,也是整数除以0异常
  • 有符号左移<<【若正数,高位补0,负数,高位补1】

    -4<<2
    1111 1111 1111 1111 1111 1111 1111 1100 原码
    1111 1111 1111 1111 1111 1111 1111 0000 左移,最右边空出两位补0
    0000 0000 0000 0000 0000 0000 0000 1111 解码
    0000 0000 0000 0000 0000 0000 0001 0000 补码
    结果:-16

  • 有符号右移(扩展符号位)>>【若正数,高位补0,负数,高位补1】

    -4>>2
    1111 1111 1111 1111 1111 1111 1111 1100 原码
    1111 1111 1111 1111 1111 1111 1111 1111 右移,最左边空出两位按规则负数空位补1
    0000 0000 0000 0000 0000 0000 0000 0000 解码
    0000 0000 0000 0000 0000 0000 0000 0001 补码(补码即最后一位+1)
    结果:-1

  • 无符号右移(逻辑右移)>>>【不论正负,高位均补0】

    -4>>>2
    1111 1111 1111 1111 1111 1111 1111 1100 原码
    0011 1111 1111 1111 1111 1111 1111 1111 右移(由于高位均补0,故>>>后的结果一定是正数)
    结果:1073741823

  • 位移数超过表示范围时, byte、char 和 short 扩充到32位取模, int 类型32位取模,long类型64位取模。所以 4>>32 和 4>>0 是等价的。

int m = -9;
int n = 6;
System.out.println(~n + 1);// 求相反数
System.out.println(n & 1);// 等价于a%2,判断奇偶
System.out.println((m & n) + ((m ^ n) >> 1));// 求平均数,不会溢出,但不能求浮点
System.out.println(n + (m - n) / 2.0);// 求平均数,不会溢出,可以求浮点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值