【问题标题】:Character Behavior during addition and subtraction in JavaJava中加减法中的字符行为
【发布时间】:2017-02-19 17:38:28
【问题描述】:

加法

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

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

减法

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

输出:2

问题:既然加法取ASCII值,但为什么减法取实际值,有人能帮忙吗?

【问题讨论】:

  • 你有没有运行过这段代码?我在此处粘贴了您在此处的确切两行,但没有得到与您相同的输出。
  • 我可以知道你得到什么输出..?
  • @Prasanth2617 它应该和你得到的完全一样。
  • ASCII 值是实际值,所以我不明白你问的区别。
  • 不幸的是 ASCII 值和实际的 int 值给出了相同的结果,所以我很困惑..!!!

标签: java character ascii


【解决方案1】:

你的猜测是正确的,添加它需要 ASCII 值。 减法也需要 ASCII 值。

但是 sout('3'+'1') 给出答案 = 100。(因为 3 的 ASCII 值是 51,而 1 的 ASCII 值是 49)。

sout('3'-'1') ,给出 answer=2。

【讨论】:

    【解决方案2】:

    这是一致的。 3 的 ASCII 值是 51,1 是 49。

    因此,您的第一个表达式是51 + 49 = 100

    你的第二个是51 - 49 = 2。有趣的巧合,答案就好像它们是数字而不是字符一样!

    编辑我看到你的第一个表达式得到了 52。如果您将 System.out.println('3' + 1);(第二个字符周围没有引号)写成 ASCII 51 + int 1 = 52,这就是您将得到的结果。

    【讨论】:

    • 非常感谢..!!! @hughjdavey 我没有注意到,无论数字或字符如何,他们都给出了相同的答案..!!! :) :)
    • 没问题。如果回答了您的问题,您能否投票并接受答案:)
    • 您也可以通过省略第二个字符周围的引号得到 52; 3 + '1' 等于 3 + 49 等于 52。
    【解决方案3】:

    首先,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ÆØÅ”。)

    添加字符不是我可以赋予 ('3' + '1') 含义的东西,尽管它是允许的,因为 char 可以在整数之间隐式或显式转换(UTF-16 代码单位价值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2010-09-12
      相关资源
      最近更新 更多