【发布时间】:2014-02-04 03:33:38
【问题描述】:
在进行字符算术时,规则是以 10 为底还是以 8 为底进行计算?我的书说 'A' = 101 in base 8 或 65 base 10 但是当我将 base 8 中的字符值插入到示例中时,我的书给出了关于说明这一点的示例,我得到了一些有趣的结果。下面的代码是我书中尝试查找新字符的 Ceaser Cipher 示例。如果我尝试转换 'Y' 并移动 8 个点以找到一个新字符,并且如果 ch = 'Y' 和 n = 8 我期望得到字符'G'。
ch = (char)('A' + (Character.toUpperCase(ch) - 'A' + n) % 26);
计算结果为
65 + (89 - 65 + 8) % 26 = 71 (base 10)
101 + (131 - 101 + 8) % 26 = 113 (基数 8)
如果我将 71(以 10 为底)转换回以 8 为底,我将得到 107,即正确的字符“G”。我的问题是为什么我不能在 base 8 中执行字符算术? 113 是字符“K”,这是错误的字符。进行字符运算时是否有规则将所有值转换为以 10 为底,然后将它们转换回以 8 为底?
【问题讨论】:
-
@SotiriosDelimanolis 解决了吗?
-
我真的很困惑。为什么要处理八进制?除此之外......您在 base8 中进行数学运算的代码在哪里?
-
没有。默认情况下,一切都是base10。 'A' == 65(至少如果您使用的是保留 US-ASCII 值的字符集)。你的代码是
(65 + (<some_val> - 65 + n) % 26) -
@JessicaM.,数值不是在任何基础。一个数字就是它。只有数字的字符串表示形式才有基数。
-
@JessicaM.:不,默认情况下,base 8 中没有任何内容。几乎所有你需要做的事情,包括处理角色,都在 base 8 中。Base 8 在这里完全是一个红鲱鱼:忘记它的一切。
标签: java unicode character ascii character-properties