英文:
Decimal to Hex help understanding
问题
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);
}
}
这是你提供的代码内容。下面是翻译的结果:
import java.util.*;
public class Dec2Hex {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个十进制数:");
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("十六进制数为:" + hex);
}
}
英文:
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);
}
}
This is an example in my book. I understand most of it but can't quite grasp a few parts. The example uses 1234 as the decimal entered.
- The remainder of 1234/16 is 2 so hexValue is 2. Therefore hexDigit is 2 + '0'. But hexDigit is a character so what is the meaning of combining or adding 2 and '0'?
- The final answer is 4D2. Where in the code did we ever provide instruction for any letter other than 'A'? How did it come up with a 'D'?
Thank you!
答案1
得分: 2
我现在明白了,条件的第二部分是将一个类似于"13"的数字,减去10,然后加上'A'。 3 + 'A'在Unicode中表示为'D'。
我仍然不明白为什么要在条件的第一部分中加上'0'。我们不能只是写成(char)(hexValue)吗?为什么要加上'0'?
谢谢!
英文:
I understand now that the second part of the condition is takin a number like "13", subtracting 10 and adding that to 'A'. 3 + 'A' is 'D' in unicode.
I still do not understand adding the '0' to the first part of the condition. Couldn't we just say (char)(hexValue)? Why add '0'?
Thanks!
答案2
得分: 1
- 余数为1234/16的余数为2,因此hexValue为2。因此hexDigit为2 + '0'。但hexDigit是一个字符,那么将2和'0'相结合或相加的意义是什么?
值 2
是一个整数值,然而变量类型是 char
。将这样的值赋给 char
变量没有问题,但这会得到字符/字节 0x02
,这是一个控制字符,不是可见的显示字符。ASCII 表中用于显示的数字从 0x30
开始(即数字 '0'
)。为了获得要保存在 char
变量中的字符值,您将计算出的值 2
与偏移量 0x30
相加。为了更轻松地进行这个计算,您使用表达式 '0'
。这恰好是 0x30
的确切值(或十进制中的 48
)。
- 最终答案是4D2。在代码中,我们除了 'A' 之外的任何字母都没有提供指令。它是如何得出 'D' 的?
计算如下:
1234
除以16
得到商77
,余数为2
。77
除以16
得到商4
,余数为13
(即D
)。4
除以16
得到商0
,余数为4
。
这导致结果为 4D2
。验证方式如下:
4*16*16 + 13*16 + 2 = 1234
英文:
> 1. The remainder of 1234/16 is 2 so hexValue is 2. Therefore hexDigit is 2 + '0'. But hexDigit is a character so what is the meaning of combining or adding 2 and '0'?
The value 2
is an integer value, however the variable type is char
. No problem in assigning such a value to a char
variable, however this would result in the 0x02
character/byte, which is a control character, not a visible character to display. The digits in the ASCII table to display begins at 0x30
(which is the digit '0'
). To get the character value to save in the char
variable you add your calculated value 2
with the offset 0x30
. To make this calculation easier you use the expression '0'
. This is the exact value of 0x30
(or 48
in decimal).
> 2. The final answer is 4D2. Where in the code did we ever provide instruction for any letter other than 'A'? How did it come up with a 'D'?
The calculation is as follow:
1234
divided by16
is77
with a remainder of2
.77
divided by16
is4
with a remainder of13
(which isD
).4
divided by16
is0
with a remainder of4
.
This results in 4D2
. To verify:
4*16*16 + 13*16 + 2 = 1234
答案3
得分: 0
每个字符都有一个值介于0到256之间的数字,其中每个数字都编码了一个可打印的符号。
例如,字符'0'的值为48,字符'A'的值为65。
因此,当对字符添加一个固定的偏移量时,就相当于在该编码中前进了该偏移量。
例如,'0' + 5就是'5',或者'A' + 3就是'D'。
所以针对你的问题:
- '0' + 2等于'2',即数字2的可打印字符。
- 在代码中,hexValue的值为13,所以hexDigit得到的值为(hexValue - 10 + 'A'),这是(13 - 10 + 'A') = 'A' + 3 = 'D'。
英文:
Every char has a value number between 0 to 256, each of these numbers encode a printable sign.
For example the value of '0' is 48, and the value of 'A' is 65.
So when adding a constant offset to a character it's like going to that offset in that encoding.
For example '0' + 5 is '5', or 'A' + 3 is 'D'.
So as for your questions:
- '0' + 2 is '2', i.e. the printable character of 2.
- In the code hexValue had the value of 13, so hexDigit got the value (hexValue - 10 + 'A'), which is (hexValue - 10 + 'A') = 13 - 10 + 'A' = 'A' + 3 = 'D'.
答案4
得分: 0
2 + '0' = 2 + 48 = 50
(char)50 = '2'
Note that
'0' = 48
'1' = 49
'2' = 50
...
'9' = 57
Check [ASCII Table](http://www.asciitable.com/) to learn more about ASCII values.
**Demo:**
public class Main {
public static void main(String[] args) {
System.out.println((char) 50);
}
}
**Output:**
2
英文:
2 + '0' = 2 + 48 = 50
(char)50 = '2'
Note that
'0' = 48
'1' = 49
'2' = 50
...
'9' = 57
Check ASCII Table to learn more about ASCII values.
Demo:
public class Main {
public static void main(String[] args) {
System.out.println((char) 50);
}
}
Output:
2
答案5
得分: 0
Ascii表 用于字符类型,因此字符可以用十进制值表示。例如:
- '0' 的十进制值为 48
- '1' 的十进制值为 49
- '2' 的十进制值为 50
- ...
- '9' 的十进制值为 57
- 'A' 的十进制值为 65
- 'B' 的十进制值为 66
- 'C' 的十进制值为 67
- 'D' 的十进制值为 68
- ...
- 'Z' 的十进制值为 90
- 'a' 的十进制值为 97
- 'b' 的十进制值为 98
- ...
- 'z' 的十进制值为 122
记住这一点,以下是你问题的答案:
我们关注这一行代码:
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 转换为字符,根据 ASCII 表,它是 '2'。
- 最终答案是 4D2。在代码中,除了 'A' 之外,我们从未提供任何其他字母的指令。它怎么会得出 'D'?
对于这个问题,感兴趣的部分是:
(char)(hexValue - 10 + 'A')
值 hexValue 是 13。根据 ASCII 表,'A' 的值是 65,'D' 的值是 68。所以 hexValue - 10 是 3,当我们将 3 与 'A' 相加时,得到 68。最后我们将其转换为字符,得到 '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'));
}
}
祝好,
英文:
Ascii table is used for char type, so characters can be represented by decimal values. For example:
- '0' in decimal 48
- '1' in decimal 49
- '2' in decimal 50
- ...
- '9' in decimal 57
- 'A' in decimal 65
- 'B' in decimal 66
- 'C' in decimal 67
- 'D' in decimal 68
- ...
- 'Z' in decimal 90
- 'a' in decimal 97
- 'b' in decimal 98
- ...
- 'z' in decimal 122
Having that in mind your here are the answers to your questions:
We focus on the line
char hexDigit = (0 <= hexValue && hexValue <= 9)?
(char)(hexValue + '0'): (char)(hexValue - 10 + 'A');
> 1. The remainder of 1234/16 is 2 so hexValue is 2. Therefore hexDigit is
> 2 + '0'. But hexDigit is a character so what is the meaning of
> combining or adding 2 and '0'?
For this question the part of interest is
(char)(hexValue + '0')
The value hexValue is 2, so hexValue + '0' is 50, because in ascii table '0' has decimal value 48. Than value of 50 is casted to char, which by ascii table is '2'.
> 2. The final answer is 4D2. Where in the code did we ever provide
> instruction for any letter other than 'A'? How did it come up with a
> 'D'?
For this question the part of interest is
(char)(hexValue - 10 + 'A')
The value hexValue is 13. By asci table 'A' has value of 65 and 'D' has value of 68. So hexValue - 10 is 3 and when we sum 3 and 'A' we get 68. Finally we do cast to char and get 'D'.
You can easyly test the answers by executing this piece of code:
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'));
}
}
Regards
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论