与您可以用十六进制或八进制定义整数常量的方式类似,我可以用二进制格式来做到这一点吗?
我承认这是一个非常简单(愚蠢)的问题。我的Google搜索即将显示为空。
与您可以用十六进制或八进制定义整数常量的方式类似,我可以用二进制格式来做到这一点吗?
我承认这是一个非常简单(愚蠢)的问题。我的Google搜索即将显示为空。
Answers:
因此,随着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中:
int i = 0b10101010;
Java的较早版本中没有二进制文字(请参阅其他答案以获取替代方法)。
_
字符使序列更易读: int i = 0b1010_1010_0011;
Java中没有二进制文字,但是我想您可以做到这一点(尽管我看不到重点):
int a = Integer.parseInt("10101010", 2);
Ed Swangren的回答
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
工作正常。我使用long
而不是,int
并添加了修饰符以阐明可能的用法作为位掩码。但是,这种方法有两个不便之处。
我可以建议替代方法
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中可用。
在Google上搜索“ Java文字语法”,您会得到一些输入。
有八进制语法(以0前缀数字),十进制语法和带有“ 0x”前缀的十六进制语法。但是没有二进制表示法的语法。
一些例子:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
byte b = 0b01000001
为了更好的读取性byte b = 0b0100_0001
)。