添加:
的System.out.println( '3' + '1');
输出:52(我相信这是因为ASCII值)
减法:
的System.out.println( '3' - '1');
输出:2
问题:由于加法需要ASCII值,但为什么减法需要实际值,有人可以帮忙吗?
答案 0 :(得分:1)
您的猜测是正确的,对于添加它需要ASCII值。 减法也需要ASCII值。
但 sout('3'+'1')给出答案= 100.(因为3的ASCII值为51,1的ASCII值为49)。
sout('3' - '1'),给出答案= 2.
答案 1 :(得分:0)
这是一致的。 ASCII值3为51,1为49.
因此,您的第一个表达是51 + 49 = 100
你的第二个是51 - 49 = 2
。有趣的巧合答案就像数字不是字符一样!
编辑我看到你的第一个表达式得到52。如果您编写了System.out.println('3' + 1);
(第二个字符周围没有引号),则可以获得这一点,因为ASCII 51 + int
1 = 52。
答案 2 :(得分:0)
首先,char
是UTF-16代码单元,UTF-16是Unicode字符集的几种编码之一。
对于字符U + 0000到U + D7FF和U + E000到U + FFFF的范围,UTF-16将它们编码为一个代码单元(char
),值为'\ u0000'到'\ uD7FF '和'\ uE000'到'\ uFFFF'。因此,在这些范围内,char
可被视为完整字符。
现在,在某些代码点范围内,顺序有时很有用:数字'0'到'9'和基本拉丁字母'A'到'Z'和'a'到'z'是自然顺序。
因此,在这些情况下,您可以使用减法来确定值之间的“距离”。 '3' - '1'= 2表示'3'超过'1'。
(将这种逻辑应用于字母也很诱人。但是,由于字母因语言而异,因此使用字符串对字母表进行排序更为直接,例如“ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ”。)< / p>
添加字符不是我可以附加('3'+'1')意义的东西,虽然它是允许的,因为char
可以在整数之间隐式或显式转换(UTF- 16代码单位值)。