Java支持的位运算符

女爷i 2022-12-21 13:54 183阅读 0赞

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. 通过位运算实现两个元素的交换

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java 运算符

    简介 将数值进行二进制层面上的比较再转换成十进制 种类 1. `^(and)` 转换成二进制,对应两个位置一样变为0,不一样变为1 2. `|(or)` 转换

    相关 Java支持运算符

    Java支持的位运算符 &:按位与,只有两个操作数对应位同为1时,结果为1,其余全为0。(或者是只要有一个操作数为0,结果就为0),通过n&1 == 1是否成立可以

    相关 Java运算符

    位运算符主要针对二进制,包括“与”、“非”、“或”、“异或”。 与运算符“&” 使用规律:两个操作数中位都为1,结果才为1,否则结果为0。 public

    相关 Java运算符

     计算机内部的数据都以二进制的形式存在,二进制数据最高位是符号位,正数是0,负数为1;正数的原码、反码、补码都是一样的,负数的反码为原码的符号位不变,其它位取反,即0->