二进制,十六进制,十进制比较

时间:2014-03-12 15:17:36

标签: java

我正在玩数字,有些有趣的事情发生在我身上,我不太明白。

 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;

也不会改变

6 个答案:

答案 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,因此当您比较hexNumberdecNumber时,您将得到真实,因为它实际上是相同的值。最后binNumber初始化为十进制值1111010,因此如果将其与其他数字进行比较,则会得到错误。