Java位运算

1 位运算符

1.1 位运算符

&:按位与。

|:按位或。

~:按位非。

^:按位异或。

<<:左位移运算符。

>>:右位移运算符。

<<<:无符号右移运算符。

位运 算 符 中 ,除 ~ 以 外 ,其余 均 为 二 元 运 算 符 。 操 作 数 只 能 为 整 型 和字 符 型 数 据 。

  • Java使用补码表示二进制数,在补码表示中,最高位为符号位 ,正数 的 符 号 位 为 0,负数 为 1。补 码 的 规 定 如 下 :
    • 对正数来说 ,最高位为 0,其余各位代表数值本 身 (以二 进制 表 示 ),如 +42的补码 为 00101010。
    • 对负数而言,把该数绝对值的补码按位取反加一,即得该数的补码。 如-1的补码为11111111111111111111111111111111 (绝对值1的补码00000000000000000000000000000001按位取反加一 11111111111111111111111111111110+1=11111111111111111111111111111111 )。负数补码求源码:符号位不变,减一后按位取反。
1.2 按位与&
  • 规则
    在这里插入图片描述
    只有两个操作数对应位同为1时,结果为1,其余全为0。

  • 举例
    在这里插入图片描述

1.3 按位或 |
  • 规则
    在这里插入图片描述
    只要有一个操作数为1,结果就为1。
1.4 按位非 ~
  • 规则:按位取反
1.5 按位异或
  • 规则:
    在这里插入图片描述
    两数不相同时为1。
1.6 左位移 <<
  • 符号位不变,低位补0,高位溢出截断
    在这里插入图片描述
  • 当移动的位数超过数字本身的位数时,那么不就都需要补0操作?实际上不是的,java不可能做那么浪费资源的事情。在真正执行位移前,其对要移动的位数做了一些预处理,比如32处理为0,-1处理为31。
1.7 右位移 >>
  • 符号位不变,低位溢出,高位用符号位补齐
    在这里插入图片描述
1.8 无符号右移 >>>
  • 无符号右移中符号位当做数字,低位溢出,高位补0。
    在这里插入图片描述
    -1 >>> 1 得int所能表示的最大整数。

2 常见使用

1. 判断奇偶性
  • n&1 == 1 ? ”奇数” : ”偶数”

    偶数的最低位肯定是0,同理,奇数的最低位肯定是1。

【转载】https://www.cnblogs.com/findbetterme/p/10787118.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值