Java SE 7中, 整数类型(byte
, short
, int
以及long
) 也可以使用二进制数系来表示。要指定一个二进制字面量,可以给二进制数字添加前缀 0b
或者 0B
。下面的示例展示了一些二进制字面量:
// 一个8位的'byte'值: byte aByte = (byte)0b00100001; // 一个16位的'short'值: short aShort = (short)0b1010000101000101; // 几个32位的'int'值: int anInt1 = 0b10100001010001011010000101000101; int anInt2 = 0b101; int anInt3 = 0B101; // B可以是大写或者小写. // 一个64位的'long'值.注意"L"后缀: long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
相比于十六进制或者八进制,二进制字面量可以使数据之间的关系更加清晰。比如, 下面数组中的每个后续数字是按位旋转的:
public static final int[] phases = { 0b00110001, 0b01100010, 0b11000100, 0b10001001, 0b00010011, 0b00100110, 0b01001100, 0b10011000 }
十六进制中, 数字之间的关系并不清晰:
public static final int[] phases = { 0x31, 0x62, 0xC4, 0x89, 0x13, 0x26, 0x4C, 0x98 }
可以在代码中使用二进制字面量常量来验证一个规范文档, 比如一个针对假设的8位微处理器的模拟器:
public State decodeInstruction(int instruction, State state) { if ((instruction & 0b11100000) == 0b00000000) { final int register = instruction & 0b00001111; switch (instruction & 0b11110000) { case 0b00000000: return state.nop(); case 0b00010000: return state.copyAccumTo(register); case 0b00100000: return state.addToAccum(register); case 0b00110000: return state.subFromAccum(register); case 0b01000000: return state.multiplyAccumBy(register); case 0b01010000: return state.divideAccumBy(register); case 0b01100000: return state.setAccumFrom(register); case 0b01110000: return state.returnFromCall(); default: throw new IllegalArgumentException(); } } else { final int address = instruction & 0b00011111; switch (instruction & 0b11100000) { case 0b00100000: return state.jumpTo(address); case 0b01000000: return state.jumpIfAccumZeroTo(address); case 0b01000000: return state.jumpIfAccumNonzeroTo(address); case 0b01100000: return state.setAccumFromMemory(address); case 0b10100000: return state.writeAccumToMemory(address); case 0b11000000: return state.callTo(address); default: throw new IllegalArgumentException(); } } }
可以使用二进制字面量增强位图的可读性:
public static final short[] HAPPY_FACE = { (short)0b0000011111100000, (short)0b0000100000010000, (short)0b0001000000001000, (short)0b0010000000000100, (short)0b0100000000000010, (short)0b1000011001100001, (short)0b1000011001100001, (short)0b1000000000000001, (short)0b1000000000000001, (short)0b1001000000001001, (short)0b1000100000010001, (short)0b0100011111100010, (short)0b0010000000000100, (short)0b0001000000001000, (short)0b0000100000010000, (short)0b0000011111100000 }
本文翻译自Oracle官方文档http://docs.oracle.com/javase/7/docs/technotes/guides/language/binary-literals.html,如有不正确的地方,敬请指正,谢谢!
相关推荐
java虚拟机规范 Java SE7 java虚拟机规范 Java SE7 java虚拟机规范 Java SE7
第二章:java虚拟结构(运行时区域内存:寄存器,java虚拟机栈,java堆,方法去,运行时常量池,本地方法栈); 第三章:为java虚拟机编译; 第四章:Class文件格式; 第五章:加载、链接与初始化
Java SE7 API中文文档-类库查询!Java SE7 API中文文档-类库查询!Java SE7 API中文文档-类库查询!Java SE7 API中文文档-类库查询!Java SE7 API中文文档-类库查询!Java SE7 API中文文档-类库查询!
Java SE7 语言规范手册,来自:http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf
OCP java SE7 Programmer II Certification Guide
于想了解 Java 虚拟机 的程序员来说,《Java 虚拟机规范》是必须阅读的,对于想深入了解 Java 语言细节的程序员, 阅读《Java 虚拟机规范》也有极大好处
OCA Java SE7 Programmer I认证学习指南(Exam 1Z0-803).rar
虚拟机 Java 1.7 SE7
介绍了Java虚拟机的规范,可以挑选自己需要的章节进行读取。
Java Virtual Machine Specification Java SE 7 中文版 Java Virtual Machine Specification Java SE 7 中文版 Java虚拟机规范SE7
Java SE 7 API文档。jdk7 API文档。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向...
虚拟机方面的权威著作 java虚拟机规范SE7,包含中文版和英文版
新版做了全面更新,体现了Java SE7的变化,并将对Java SE 7新特性的完整描述融入对Java基本概念的精辟阐述中。 Java核心技术卷II:高级特性(第9版英文版)(上、下册)专为做实际项目的程序员编写,是一本真实可信、...
https://pan.baidu.com/s/1kO1Ng7HW_3I2Us8SpBoesw Java虚拟机规范
《Java虚拟机规范(Java SE7版)》由林德霍尔姆著,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕.Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...
java se 7 api chm english so salasala ~~yi ya ~~
《Java虚拟机规范 7》是一份完整的描述Java虚拟机是如何设计的规范文档。这份文档对于任何一个希望实现Java虚拟机的编译器作者,或者希望实现一个与规范相兼容的Java虚拟机的程序员来说都是必不可少的。
Targeted at intermediate-to-advanced developers, this is the definitive tutorial introduction and reference to the Java SE7 language and its essential libraries. Co-authored by "father of Java" James ...
se7en管理模板,基于Bootstrap3实现,好资源要多分享