Java 基础教程

Java 位运算符

位运算符用来对二进制位进行操作,每一位的取值为 0  或 1。如下图:

上图中,十进制 57(十六进制 39,八进制为 71)的二进制为 0011 1001,其中包含了 8 个位,位操作符就是对这些 0 和 1 进行操作。

Java 中位运算符用于对整型数据的二进制位进行运算,具体包括如下:

  • ~    按位取反,即 0 取反为 1,1 取反为 0

  • &    按位与,即 1 和 1 进行与运算为 1,其它均为 0

  • |    按位或,即 0 和 0 进行或运算为 0,其它均为 0

  • ^    按位异或,即 1 和 0,或者 0 和 1 进行或运算为 1,其它均为 0

下表是 Java 位运算的逻辑规则:

ab~aa & ba | ba ^ b
110110
100011
011011
001000

示例

import java.util.Arrays;

public class Demo {

    public static void main(String[] args) {
        int a = 20, b = 35;
        // 注意 Integer.toBinaryString() 方法是 Integer 类中的静态工具方法
        // 用来将数字使用二进制字符串显示
        System.out.println("  a=" + format(Integer.toBinaryString(a)));
        System.out.println("  b=" + format(Integer.toBinaryString(b)));
        // 按位取反
        System.out.println(" ~a=" + format(Integer.toBinaryString(~a)));
        // 按位与
        System.out.println("a&b=" + format(Integer.toBinaryString(a & b)));
        // 按位或
        System.out.println("a|b=" + format(Integer.toBinaryString(a | b)));
        // 按位异或
        System.out.println("a^b=" + format(Integer.toBinaryString(a ^ b)));
    }

    /**
     * 格式化字符串,保持字符串长度为32,如果长度不够,左边填充字符0
     * @param str 带格式化字符串
     * @return
     */
    private static String format(String str) {
        if(str.length() > 32) {
            return str;
        }

        // 实现左端用字符0补齐
        char[] chars = new char[32 - str.length()];
        Arrays.fill(chars, '0');
        String tmpStr = String.copyValueOf(chars) + str;

        // 这里使用了 Java 的 StringBuilder,后续会介绍
        StringBuilder buffer = new StringBuilder();
        for(int i = 0; i < tmpStr.length(); i++) {
            if(i > 0 && i % 8 == 0) {
                buffer.append(" ");
            }
            buffer.append(tmpStr.charAt(i));
        }

        return buffer.toString();
    }

}

运行示例,输出结果如下:

  a=00000000 00000000 00000000 00010100
  b=00000000 00000000 00000000 00100011
 ~a=11111111 11111111 11111111 11101011
a&b=00000000 00000000 00000000 00000000
a|b=00000000 00000000 00000000 00110111
a^b=00000000 00000000 00000000 00110111


说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号