在 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() 方法)。