有人可以帮我理解基数在Character.forDigit(int digit, int radix)
方法中的重要性吗?
答案 0 :(得分:5)
选择合适的基数可以生成非十进制数字的“数字” - 例如,如果为基数传递16,则可以生成十到十五的数字字符,因为以十六进制计数使用十六位数 - 0到9,接着是A到F:
char ten = Character.forDigit(10, 16); // returns 'a'
答案 1 :(得分:1)
这很棘手,因为它的重要性并不像它第一次出现时那么明显。将字符串转换为整数时,基数当然很重要。如果要将"101"
转换为整数,则会得到不同的答案,具体取决于基数(基数)是二进制(2),十进制(10),八进制(8),十六进制(16)还是其他任何基础。类似地,当将整数转换为字符串时,结果(当源为> = MAX_RADIX时)对于不同的基数都是不同的。
对于forDigit
,答案并非如此清晰。当您将数字转换为表示数字的单个字符时,只要数字对基数有效,答案就始终相同。因此,Character.forDigit(11,radix)
始终为所有基数12及以上返回'b'
。那么唯一的意义在于当数字对基数无效时如何处理这种情况?也就是说,对于二进制(基数= 2),forDigit
仅在数字为0或1时有效;那么,如果你说Character.forDigit(2,2)
,它应该怎么做,因为2不是有效的二进制数字?
语言设计师可以做一些事情:(1)摆脱基数参数并将责任放在程序员身上,以确保数字在范围内(在许多情况下,无论如何都是给定的) ; (2)抛出异常; (3)返回一些特殊值。他们选择(3):如果你给它一个对基数有效的数字,它会返回'\0'
,这是一个空字符。这似乎不是最好的选择 - 您不太可能真的想要将null字符用于任何事情,这意味着您必须自己进行检查,这意味着他们可能应该拥有该方法抛出一个例外。但它确实如此。
但无论如何,radix
对于此方法的重要性:它会根据基数执行检查以确保参数在范围内。
答案 2 :(得分:0)
这是号码的基础。通常使用基数10(即 0-9)。但是,您可能也有兴趣使用十六进制( ie 0-9,A-F)。然后基数为16。
示例:
Character.forDigit(8, 16)=8
Character.forDigit(9, 16)=9
Character.forDigit(10, 16)=a
Character.forDigit(11, 16)=b