文档章节

Java SE7新特性之二进制字面量

JackieYeah
 JackieYeah
发布于 2016/04/11 20:01
字数 475
阅读 16
收藏 0

 Java SE 7中, 整数类型(byteshortint以及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,如有不正确的地方,敬请指正,谢谢!

© 著作权归作者所有

JackieYeah
粉丝 45
博文 70
码字总数 90004
作品 0
武汉
程序员
私信 提问
好好说说Java中的常量池之Class常量池

在Java中,常量池的概念想必很多人都听说过。这也是面试中比较常考的题目之一。在Java有关的面试题中,一般习惯通过String的有关问题来考察面试者对于常量池的知识的理解,几道简单的String面...

HollisChuang's Blog
2018/10/21
0
0
【javac添加python 列表特性4】Idea:希望Javac能支持的Python列表特性

对于python的list,相信用过的人都知道有好些很cool的功能,我希望能把这些功能加入到java里面去。 我希望java能够支持一下的Python特性: public class Main{//list defineList k=[];List ...

guoliang
2012/11/15
72
0
黑马程序员---面向对象之String类创建对象的一点思考

-------------------------android培训、java培训、期待与您交流! ------------------------- 最近在上黑马论坛时经常有同学问到关于String类创建对象的问题,最多的就是诸如:String str ...

长平狐
2013/07/01
128
0
一起学Java7新功能扩展——深入历险分享(一)

特此声明:因网友疑问,这里声明一个重要的安全,就是大家所知的java惊现0day漏洞!8月30日,Oralce紧急发布了新版本的JDK和JRE,原因是发现了一个严重的0day漏洞CVE-2012-4681,远程攻击者可...

Beyond-Bit
2012/09/03
4.2K
26
Programcreek -Java基础之String---用""还是用new String("")

Java里可以用两种方法来创建一个String: String x = "abc";String y = new String("abc"); 这两种方法有什么不同? 1. 双引号 Vs. 构造函数 用两个简单的代码来回答这个问题。 Example 1: S......

YangEphraim
2015/03/19
474
0

没有更多内容

加载失败,请刷新页面

加载更多

006-Docker中导出单个或多个tar包

docker中导出单个镜像和多个镜像的tar包 docker save [images] > [name.tar] docker save [images] [images] > [name.tar]...

伟大源于勇敢的开始
今天
6
0
Kotlin基础语法学习

安装好安卓studio,以及插件支持Kotlin 就可以在创建项目的时候选择 Kotlin语言了。 https://www.jianshu.com/p/4ab13691d681 参考手册: https://www.runoob.com/kotlin/otlin-android-setu...

T型人才追梦者
今天
4
0
java实现简单计算器

1.概述 之前作者写过一篇文章,也是关于计算器的,用的是C++与Qt,链接在这里 这次用java的swing写的(这差距好像有点大,好吧是qt太强了). 先上图: 2.UI 总体布局使用流布局. (1)文本框 文本框就...

Blueeeeeee
今天
4
0
纯CSS实现DIV悬浮(固定位置)

纯CSS实现的DIV悬浮效果(固定位置),兼容常用的浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗等。效果如下: 实现代码: <!DOCTYPE html> <html> <head> <meta ...

独钓渔
今天
6
0
OSChina 周二乱弹 —— 给我来个女菩萨

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐#分享XXXTENTACION/Travis Barker的单曲《Pain = BESTFRIEND》: 《Pain = BESTFRIEND》- XXXTENTACION/...

小小编辑
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部