Jave - 方法是--parseByte(String s,int radix) - 我无法理解它

时间:2017-12-07 09:08:38

标签: java

这是教程给我的一个例子。我无法理解答案 - 123的解析字节值是83,-1a的解析字节值是-26。请尝试以非常简单的方式向我解释这个方法。

import java.lang.*;

public class ByteDemo {

   public static void main(String[] args) {

      // create 2 byte primitives bt1, bt2
      byte bt1, bt2;

      // create and assign values to String's s1, s2
      String s1 = "123";
      String s2 = "-1a";

      // create and assign values to int r1, r2
      int r1 = 8;  // represents octal
      int r2 = 16; // represents hexadecimal

      /**
       *  static method is called using class name. Assign parseByte
       *  result on s1, s2 to bt1, bt2 using radix r1, r2
       */
      bt1 = Byte.parseByte(s1, r1);
      bt2 = Byte.parseByte(s2, r2);

      String str1 = "Parse byte value of " + s1 + " is " + bt1;
      String str2 = "Parse byte value of " + s2 + " is " + bt2;

      // print bt1, bt2 values
      System.out.println( str1 );
      System.out.println( str2 );
   }
}

2 个答案:

答案 0 :(得分:2)

第一个值123被解释为八进制数,即带有基数8的数字。

现在1 * 8 ^ 2 + 2 * 8 + 3 = 64 + 16 + 3 = 83

第二个值-1a被解释为十六进制数,即带有16的数字。由于我们只有10个符号用于数字(0,..,9),符号a,b ,c,d,e,f用于表示十进制值大于9的数字。因此a(16)= 10(10),b(16)= 11(10),依此类推。

和 - (1 * 16 + 10)= -26

答案 1 :(得分:2)

在你的第一个例子中,你取123并将其解释为八进制表示中的数字,这意味着第一个数字不是100而是只有64(8 * 8)。因此123被解释为8 * 8 * 1 + 8 * 2 + 3 = 83。 在第二个例子中,1a被解释为十六进制表示。所以-1a = - (16 * 1 + 10)= -26。