Java支持的位运算符

Java支持的位运算符

  • &:按位与,只有两个操作数对应位同为1时,结果为1,其余全为0。(或者是只要有一个操作数为0,结果就为0),通过n&1 == 1是否成立可以判断一个数n的奇偶性,若成立,则为奇数,否则为偶数。
  • |:按位或,只有两个操作数对应位同为0时,结果为0,其余全为1。(或者是只要有一个操作数为1,结果就为1)。
  • ~:按位非,对应位取反即可。
  • ^:按位异或,对应位不同为1,相同则为0。
    • 任何数异或本身结果为0。
    • a ^ b=b ^ a,异或是一个无顺序的运算符,则b ^ a ^ b=b ^ b ^ a,结果为0^a。
  • <<:左移一位,相当于×2,m<<n相当于m*2^n
  • >>:右移一位,相当于÷2
  • >>>:无符号右移运算符,低位溢出,高位补0。注意,无符号右移(>>>)中的符号位(最高位)也跟着变,无符号的意思是将符号位当作数字位看待。如:-1>>>1结果为2147483647。

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

长见识:

1. 通过位运算取绝对值原文链接

(a^(a>>31))-(a>>31)

先整理一下使用位运算取绝对值的思路:若a为正数,则不变,需要用异或0保持的特点;若a为负数,则其补码为源码翻转每一位后+1,先求其源码,补码-1后再翻转每一位,此时需要使用异或1具有翻转的特点。

任何正数右移31后只剩符号位0,最终结果为0,任何负数右移31后也只剩符号位1,溢出的31位截断,空出的31位补符号位1,最终结果为-1.右移31操作可以取得任何整数的符号位。

那么综合上面的步骤,可得到公式。a>>31取得a的符号,若a为正数,a>>31等于0,a^0=a,不变;若a为负数,a>>31等于-1 ,a^-1翻转每一位.

2. 通过位运算实现两个元素的交换

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值