在Java中,我可以用二进制格式定义整数常量吗?

时间:2009-05-15 07:14:56

标签: java syntax binary

类似于如何定义十六进制或八进制的整数常量,我可以用二进制来完成吗?

我承认这是一个非常容易(和愚蠢)的问题。我的谷歌搜索空白了。

8 个答案:

答案 0 :(得分:152)

在Java 7中:

int i = 0b10101010;

旧版Java中没有二进制文字(请参阅其他替代答案)。

答案 1 :(得分:61)

因此,随着Java SE 7的发布,二进制表示法开箱即用。如果您对二进制有一个很好的理解,那么语法非常简单明了而且很明显:

byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111; 
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;

特别是在将类级别变量声明为二进制文件时,使用二进制表示法初始化静态变量绝对没有问题:

public static final int thingy = 0b0101;

请注意不要使用太多数据溢出数字,否则您将收到编译器错误:

byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte

现在,如果您真的想要获得幻想,可以将Java 7中另一个简洁的新功能(称为数字文字与下划线)结合起来。用文字下划线看看这些二进制表示法的奇特例子:

int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;

现在不是那么干净,更不用说高度可读了吗?

我从TheServerSide上关于该主题的一篇文章中提取了这些代码片段。请随时查看更多详细信息:

Java 7 and Binary Notation: Mastering the OCP Java Programmer (OCPJP) Exam

答案 2 :(得分:53)

Java中没有二进制文字,但我想你可以这样做(虽然我没有注意到这一点):

int a = Integer.parseInt("10101010", 2);

答案 3 :(得分:18)

Ed Swangren的回答

public final static long mask12 = 
  Long.parseLong("00000000000000000000100000000000", 2);

工作正常。我使用long代替int并添加了修饰符以阐明可能的用法作为位掩码。但是,这种方法有两个不便之处。

  1. 所有这些零的直接输入容易出错
  2. 开发时结果不提供十进制或十六进制格式
  3. 我可以建议替代方法

    public final static long mask12 = 1L << 12;
    

    这个表达式很明显第12位是1(计数从0开始,从右到左);当你悬停鼠标光标时,工具提示

    long YourClassName.mask12 = 4096 [0x1000]
    

    出现在Eclipse中。您可以定义更复杂的常量,如:

    public final static long maskForSomething = mask12 | mask3 | mask0;
    

    或明确

    public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
    

    变量maskForSomething的值在开发时仍可在Eclipse中使用。

答案 4 :(得分:16)

使用二进制常量来屏蔽

声明常量:

public static final int FLAG_A = 1 << 0;
public static final int FLAG_B = 1 << 1;
public static final int FLAG_C = 1 << 2;
public static final int FLAG_D = 1 << 3;

并使用它们

if( (value & ( FLAG_B | FLAG_D )) != 0){
    // value has set FLAG_B and FLAG_D
}

答案 5 :(得分:12)

在Google上搜索“Java文字语法”,你会想出一些条目。

有一个八进制语法(数字前缀为0),十进制语法和带有“0x”前缀的十六进制语法。但没有二进制表示法的语法。

一些例子:

int i = 0xcafe ; // hexadecimal case
int j = 045 ;    // octal case
int l = 42 ;     // decimal case

答案 6 :(得分:2)

如果你想搞乱大量二进制文件,你可以定义一些常量:

public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;

public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;

答案 7 :(得分:0)

稍微尴尬的答案:

public class Main {

    public static void main(String[] args) {
        byte b = Byte.parseByte("10", 2);
        Byte bb = new Byte(b);
        System.out.println("bb should be 2, value is \"" + bb.intValue() + "\"" );
    }

}

哪个输出 [java] bb应为2,值为“2”