【问题标题】:Calculating with the char variable in java用java中的char变量计算
【发布时间】:2014-10-24 22:18:05
【问题描述】:

我有一个学校作业,其中一项任务是解释许多微小的计算,并解释为什么 java 给你它给你的输出..

其中一项计算是:

1 + '2' + 3

这对我来说是一个词汇错误,因为老师在我的系统中使用了错误的“撇号”,但我已经和其他同学交谈过,他们告诉我他们得到了一个实际的输出,所以我开始阅读它,并发现它应该表示一个 char 变量,并且我还发现了系统特定类型,所以我更改了符号以适用于我的系统,现在我得到了答案 54。 .

我看不到其中的逻辑,我尝试使用 char 变量在 Google 上添加/计算/数学,但没有找到任何可以很好地解释它的东西..

所以我求助于编码人员,有一天我可能会成为其中的一员,以帮助我理解其中的逻辑..

这开始是一个家庭作业,我可能可以通过回答它给出一个词法错误来完成它,因为我的编译器不理解这个符号,但现在它已经达到了我的好奇心,我真的很想知道如何java设法得到这个答案..

感谢您对此事的任何帮助! :)

我可以看到我无法制作“作业”标签,所以我希望我可以把它放在这里:)

【问题讨论】:

标签: java math char apostrophe


【解决方案1】:

在 Java 中,chars 通过 UTF-16 直接映射到 ints。但是,对于大多数常见字符,将 char 值转换为 int 会在 ascii 表中生成它的索引。 + 不是对字符的操作,而是对整数的操作。因此,java 采用2 并在思考“我无法添加它”之后,意识到如果将其转换为 int 则可以添加它。

正如您在表格中看到的,“2”的索引为 50,因此 1 + 50 + 3 = 54。

【讨论】:

  • 这个!哈哈,原来如此!非常感谢,这解释得很好!这意味着我今晚会睡得很好......再次感谢你!
  • 没问题!尽可能接受答案!
  • Java 使用 Unicode 而不是 ASCII! 在字符串和字符中,它使用称为 UTF-16 的 Unicode 编码。 char 是一个 UTF-16 代码单元,其中一个或两个保存代码点的值,代码点是一个数字,用于标识字符集中的字符。按照设计,Unicode 是 ASCII 的超集,对常见字符使用相同的代码点。 Character 类告诉代码单元是完整的代码点还是完整代码点的一对。
  • 好的;我想我明白了..所以我将其标记为答案,因为评论澄清了为什么上述对于我提出的问题是正确的。
  • 噢……不知道。将更改答案以反映这一点。
【解决方案2】:

字符实际上就是数字。计算机使用字符集(charset)将 char 转换为整数。字符集是将指定字符绑定到指定整数的表,因此您的计算机可以将其转换为二进制并将其存储在内存中。稍后在需要时,该数字可以转换回字符。您的编译器使用 Unicode(ASCII 的超集,感谢 Tom Blodget),因此字符 '2' 实际上是十进制整数 50(更多信息:http://unicode-table.com/en/,请注意表格使用十六进制数字,所以十六进制 32 是十进制 50)。由于默认情况下加法返回一个整数,因此字符会被转换和相加,但实际上从未转换回其原始形式。

至于为什么它会出错,这可能是因为 Java 在类型之间存在差异,并且您的编译器(或任何引发错误的东西)更严格。不要相信我的话,您可能应该查看标准和您的实现。例如,在 C 中,添加总是会成功。

希望能把事情弄清楚一点。

【讨论】:

  • 编译器不使用 ASCII。 请参阅我对此 answer 的评论。
  • 忘记了,谢谢(我用我的母语为应用程序编写输出字符串,它使用了几个非 ASCII 字符)。更正了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
相关资源
最近更新 更多