import java.util.*;
public class Dec2Hex {
public static void main (String[] args){
Scanner input new Scanner (System.in);
System.out.print("Enter a decimal number: ");
int decimal = input.nextInt();
String hex = "";
while (decimal != 0) {
int hexValue = decimal % 16;
char hexDigit = (0 <= hexValue && hexValue <= 9)?
(char)(hexValue + '0'): (char)(hexValue - 10 + 'A');
hex = hexDigit + hex;
decimal = decimal/16;
}
System.out.println("The hex number is " + hex);
}
}
这是我书中的一个例子。我了解其中的大部分内容,但不能完全掌握其中的几个部分。该示例使用1234作为输入的小数。
谢谢!
答案 0 :(得分:2)
我现在了解到,条件的第二部分是羚羊数字,例如“ 13”,减去10并将其加到“ A”上。 3 + Unicode中的“ A”为“ D”。
我仍然不明白在条件的第一部分添加“ 0”。我们不能只说(char)(hexValue)吗?为什么加上“ 0”?
谢谢!
答案 1 :(得分:1)
- 1234/16的余数是2,所以hexValue是2。因此hexDigit是2 +'0'。但是hexDigit是一个字符,那么将2和'0'相加或相加是什么意思?
值2
是一个整数值,但是变量类型为char
。将这样的值分配给char
变量没有问题,但是这将导致0x02
字符/字节,它是control character,而不是可见字符。要显示的ASCII表中的数字从0x30
开始(即数字'0'
)。要获取要保存在char
变量中的字符值,请添加具有偏移量2
的计算值0x30
。为了简化计算,您可以使用表达式'0'
。这是0x30
(或十进制的48
)的确切值。
- 最终答案是4D2。我们曾在代码中的哪个地方提供过除“ A”以外的任何字母的说明? 是怎么想到的?
计算如下:
1234
除以16
为77
,其余为2
。77
除以16
是4
,其余为13
(即D
)。4
除以16
为0
,其余为4
。结果为4D2
。要验证:
4*16*16 + 13*16 + 2 = 1234
答案 2 :(得分:0)
每个char的值都介于0到256之间,这些数字中的每一个编码可打印的符号。
例如,“ 0”的值为48,而“ A”的值为65。
因此,当向字符添加常量偏移量时,就像在该编码中转到该偏移量一样。
例如'0'+ 5为'5',或'A'+ 3为'D'。
关于您的问题:
答案 3 :(得分:0)
2 + '0' = 2 + 48 = 50
(char)50 = '2'
请注意
'0' = 48
'1' = 49
'2' = 50
...
'9' = 57
选中ASCII Table,以了解有关ASCII值的更多信息。
演示:
public class Main {
public static void main(String[] args) {
System.out.println((char) 50);
}
}
输出:
2
答案 4 :(得分:0)
Ascii table用于字符类型,因此字符可以用十进制值表示。例如:
请记住,这里是您问题的答案:
我们专注于生产线
char hexDigit = (0 <= hexValue && hexValue <= 9)?
(char)(hexValue + '0'): (char)(hexValue - 10 + 'A');
- 1234/16的余数是2,所以hexValue是2。因此hexDigit是 2 +'0'。但是hexDigit是一个字符,所以...的含义是什么 结合还是加2和“ 0”?
对于这个问题,感兴趣的部分是
(char)(hexValue + '0')
值 hexValue 为2,所以 hexValue +'0'为50,因为在ascii表中'0'的十进制值为48。强制转换为50以上的值到char,按ascii表为'2'。
- 最终答案是4D2。我们曾在代码中提供的位置 除“ A”以外的其他字母的说明?它是怎么想到的 'D'?
对于这个问题,感兴趣的部分是
(char)(hexValue - 10 + 'A')
值 hexValue 为13。通过asci表,“ A”的值为65,而“ D”的值为68。因此hexValue-10为3,并且我们将3与“ A”相加我们得到68。最后我们将其强制转换为char并获得“ D”。
您可以通过执行以下代码轻松测试答案:
public class Main {
public static void main(String[] args) {
System.out.println("Decimal value: "+(2+'0')+" Char value:" +(char)(2+'0'));
System.out.println("Decimal value: "+(3 + 'A')+" Char value: "+ (char)(3+'A'));
}
} 问候