我正在玩数字,有些有趣的事情发生在我身上,我不太明白。
public static void main(String[] args) {
int hexNumber = 0x7A;//decimal: 122 binary:0111 1010
int decNumber = 122;
int binNumber = 1111010;
System.out.println(hexNumber);//122
System.out.println(Integer.toString(hexNumber, 16)); //7a
System.out.println(Integer.toHexString(hexNumber)); //7a
System.out.println(Integer.toString(hexNumber, 2)); // 1111010
System.out.println(Integer.toBinaryString(hexNumber)); //1111010
System.out.println(hexNumber==binNumber);//false
System.out.println(hexNumber==decNumber);//true
System.out.println(decNumber==binNumber);//false
}
为什么我在#1和#3得到“假”?即使binNumber = 01111010;
也不会改变答案 0 :(得分:5)
好吧,你不能在没有任何前缀的情况下直接在Java中存储二进制值。
binNumber
未存储为二进制号码1111010
;相反,它存储为十进制数1111010
。
您必须以[{1}}或更好的方式存储int binNumber = Integer.parseInt("1111010", 2);
。
对于八进制:
int binNumber = 0b1111010;
或
int octalNo = 0177; //'0' is prefix
对于十六进制:
int octalNo = Integer.parseInt("0177", 8); //leading '0's are ignored
或
int hexNo = 0x177; //'0x' is prefix
有关详细信息,请查看this。
答案 1 :(得分:2)
您不是将二进制数创建为二进制数。您将其创建为十进制(基数10),恰好只包含0和1。
答案 2 :(得分:2)
要在Java 7中存储0111 1010
,请使用新的二进制文字(您甚至可以使用下划线以便于阅读)
int binNumber = 0b0111_1010;
答案 3 :(得分:0)
因为这不是指定二进制数的正确方法(并且在Java中没有这样的方法,除了Integer.toBinaryString(122)
之外会给你一个正确的二进制表示(以字符串形式返回) ))。
您的号码被解释为"正常"十进制整数(如果不带前导0输入)或八进制系统中的整数(如果以前导0输入)。
答案 4 :(得分:0)
在7之前的Java版本中,您需要使用此
int binNumber = Integer.parseInt("1111010", 2);
在7及以上,你可以使用
int binNumber = 0b1111010;
有了这个改变,你的代码在这里工作(我得到三个真正的结果)。
答案 5 :(得分:0)
答案很清楚。您已为整数分配了一些不同的值。hexNumber
初始化为十进制值122,即使您使用的表示形式为十六进制。 decNumber
初始化为十进制值122,因此当您比较hexNumber
和decNumber
时,您将得到真实,因为它实际上是相同的值。最后binNumber
初始化为十进制值1111010,因此如果将其与其他数字进行比较,则会得到错误。