Java中加法和减法期间的字符行为

时间:2017-02-19 17:38:29

标签: java character ascii

添加

的System.out.println( '3' + '1');

输出:52(我相信这是因为ASCII值)

减法

的System.out.println( '3' - '1');

输出:2

问题:由于加法需要ASCII值,但为什么减法需要实际值,有人可以帮忙吗?

3 个答案:

答案 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代码单位值)。