Java7 二进制整数

在 Java7 中,引入了二进制字面量的表示方法。可以使用前缀来表示二进制数字。例如:

package com.hxstrive.jdk7.base;

/**
 * 二进制数字表示
 * @author hxstrive.com
 */
public class BinaryDemo1 {

    public static void main(String[] args) {
        // 0b开头表示二进制数字,使用二进制形式给变量赋值
        byte a = 0b00001010;
        System.out.println("a = " + a);

        // 表示十进制的10
        int b = 0B1010;
        System.out.println("b = " + b);

        // 使用二进制数字表示,更直观的查看位逻辑运算
        byte b1 = 0b00001010;
        byte b2 = 0b00100010;
        //          00000010
        System.out.println("b1 & b2 = " + (b1 & b2));
    }

}

下面例子将演示如何通过二进制字面量来模拟 Linux 中文件目录权限“读/写/执行”,使用三个bit位来表示这些权限,其中:

  • 100 表示读权限

  • 010 表示写权限

  • 001 表示执行权限

package com.hxstrive.jdk7.base;

/**
 * 二进制数字表示
 * @author hxstrive.com
 */
public class BinaryDemo2 {

    public static void main(String[] args) {
        auth((byte)4); // 拥有读权限
        auth((byte)7); // 拥有读写执行权限
        auth((byte)9); // 权限非法,权限取值范围 [0,7]

        auth2((byte)4); // 拥有读权限
        auth2((byte)7); // 拥有读写执行权限
        auth2((byte)9); // 权限非法,权限取值范围 [0,7]
    }

    private static void auth(byte auth) {
        // 权限定义:rwx 读写执行
        switch (auth) {
            case 0: // 000
                System.out.println("无权限");break;
            case 4: // 100
                System.out.println("拥有读权限");break;
            case 2: // 010
                System.out.println("拥有写权限");break;
            case 1: // 001
                System.out.println("拥有执行权限");break;
            case 6: // 110
                System.out.println("拥有读写权限");break;
            case 5: // 101
                System.out.println("拥有读执行权限");break;
            case 7: // 111
                System.out.println("拥有读写执行权限");break;
            case 3: // 011
                System.out.println("拥有写执行权限");break;
            default:
                System.out.println("权限非法,权限取值范围 [0,7]");
        }
    }

    private static void auth2(byte auth) {
        // 权限定义:rwx 读写执行
        switch (auth) {
            case 0B000:
                System.out.println("无权限");break;
            case 0B100:
                System.out.println("拥有读权限");break;
            case 0B010:
                System.out.println("拥有写权限");break;
            case 0B001:
                System.out.println("拥有执行权限");break;
            case 0B110:
                System.out.println("拥有读写权限");break;
            case 0B101:
                System.out.println("拥有读执行权限");break;
            case 0B111:
                System.out.println("拥有读写执行权限");break;
            case 0B011:
                System.out.println("拥有写执行权限");break;
            default:
                System.out.println("权限非法,权限取值范围 [0,7]");
        }
    }

}

在 Java7 之前,我们使用数字或者十六进制表示二进制,如:0x05 或者十进制 5 均表示 0101。在进行二进制计算时,看上去不是很直观,需要我们将他们手动转换成二进制,再来理解其计算(见 auth() 方法)。但是,在 Java7 中,完全不用这么麻烦了,我们可以直接使用 0b0101 类似的方式直接表示二进制,对其进行位计算更直观了(见 auth2() 方法)。

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