2017-12-07 27 views
1

これはチュートリアルで私に与えられた例です。私は答えを理解することはできません - 123のパースバイト値は83です-1パールバイト値は-26です。私に方法を非常に簡単に説明してください。Jave - メソッドは - parseByte(String s、int radix) - 理解できません

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); 
    } 
} 
+1

docおそらくお手伝いします。https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html#parseByte-java.lang.String-int- –

答えて

2

最初の値、123が、ベースと、すなわち数、8進数として解釈される8

今1 * 8^2 + 2 * 8 + 3 = 64 + 16 + 3 = 83

第2の値-1aは16進数、つまり16進数と解釈されます。数字(0、..、9)に対して10個の記号しかないため、記号a (16)= 10(10)、b(16)= 11(10)というように、b、c、d、e、fは10進値が9より大きい桁を表すために使用されます。

そして - あなたの最初の例では(1 * 16 + 10)= -26

2

あなたは最初の数字を意味し、123を取ると、進表現における数と解釈100ではなく、唯一の64(8 * 8)。したがって、123は8 * 8 * 1 + 8 * 2 + 3 = 83と解釈されます。 2番目の例では、1aは16進表現で解釈されます。したがって-1a = - (16 * 1 + 10)= -26。

関連する問題