我知道函数Integer.parseInt()
的基数是将字符串转换为的基数。用基数/基数16转换的11基数10不应该是B
而不是17
吗?
以下代码根据课本打印17:
public class Test {
public static void main(String[] args) {
System.out.println( Integer.parseInt("11", 16) );
}
}
使用基数执行ParseInt
运算时,基数为11的16解析为17,这是一个简单的值。然后将其打印为基数10。
您想要:
System.out.println(Integer.toString(11, 16));
这取十进制值11(目前没有基数,就像有"十一个"西瓜(比一个人的手指数多一个)),并用基数16打印,得到B
。
当我们取一个int
值时,它以基数2的形式存储在计算机的物理内存中(几乎在所有情况下),但这无关紧要,因为解析和字符串转换使用任意基数(默认为10)。
它实际上采用十六进制的11
并将其转换为十进制。例如,如果您有相同的代码,但字符串中有"A"
,它将输出10
。
此处,
public class Test {
public static void main(String[] args) {
System.out.println(Integer.parseInt("11", 16));
}
}
11是基于16的数字,应转换为10,即十进制。
So, integer of (11)16 = 1*16^1 +1*16^0 = 16+1 = 17
您基本上是在告诉解析11,就好像它是基16一样所以如果你知道如何从十六进制转换为十进制它会是这样的十六进制中的11=((16^0)*1)+((16^1)*1)=十进制中的17
如果你想从基本10转换为任何基本用途:
Integer.toString(11, 16); //HEXA
output: b
Integer.toString(11, 10); //decimal
output: 11
Integer.toString(11, 8); //octal
output: 13
Integer.toString(11, 2); //Binary
output: 1011
函数按照您的想法向后执行。您将基数为16的"11"转换为基数为10,因此结果为17。
要从基数10转换到基数16,请使用
System.out.println(Integer.toString(11, 16));
输出将为b.