Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java中的char变量进行计算_Java_Math_Char_Apostrophe - Fatal编程技术网

用java中的char变量进行计算

用java中的char变量进行计算,java,math,char,apostrophe,Java,Math,Char,Apostrophe,我有一个学校作业,其中一个任务是解释许多微小的计算,解释为什么java会给你它给你的输出 其中一个计算是: 1+2+3 这对我来说是一个词汇错误,因为老师在我的系统中使用了错误的“撇号”,但我和其他同学谈过,他们告诉我他们得到了一个实际的输出,所以我开始阅读它,发现它应该表示一个char变量,我还发现了系统特定的类型,因此,我改变了标志,使其适用于我的系统,现在我得到了答案54 我看不到其中的逻辑,我试着在谷歌上用char变量添加/计算/数学,但没有找到能很好解释它的东西 所以我求助于你们,编码

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

其中一个计算是:

1+2+3

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

我看不到其中的逻辑,我试着在谷歌上用char变量添加/计算/数学,但没有找到能很好解释它的东西

所以我求助于你们,编码界的人,也许有一天我会成为其中的一员,帮助我理解其中的逻辑

这开始是一个家庭作业,我可能只需要回答它给出了一个词法错误,因为我的编译器不理解这个符号,就可以完成它,但现在我的好奇心达到了顶峰,我真的想知道java是如何得到这个答案的

谢谢你在这件事上的帮助!:)


我可以看出我不能做“家庭作业”标记,所以我希望我可以把它放在这里:)

在Java中,
char
s通过UTF-16直接映射到
int
s。但是,对于大多数常见字符,将
char
值强制转换为
int
会在ascii表上生成其索引<代码>+不是对字符的操作,但它是对ints的操作。因此,java采用了
2
,在考虑了“我不能添加这个”之后,意识到如果将它强制转换为int,它可以添加它


如表中所示,“2”的索引为50,因此1+50+3=54。在Java中,
char
s通过UTF-16直接映射到
int
s。但是,对于大多数常见字符,将
char
值强制转换为
int
会在ascii表上生成其索引<代码>+不是对字符的操作,但它是对ints的操作。因此,java采用了
2
,在考虑了“我不能添加这个”之后,意识到如果将它强制转换为int,它可以添加它


如表中所示,“2”的索引为50,因此1+50+3=54。

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

至于它为什么会出错,可能是因为Java在不同类型之间存在差异,而且编译器(或抛出错误的任何编译器)更严格。不要相信我的话,你可能应该看看标准和你的实现。例如,在C语言中,这种加法总是成功的


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

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

至于它为什么会出错,可能是因为Java在不同类型之间存在差异,而且编译器(或抛出错误的任何编译器)更严格。不要相信我的话,你可能应该看看标准和你的实现。例如,在C语言中,这种加法总是成功的


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

当你把一个较宽的类型添加到一个较窄的类型时,可能会出现重复的情况,结果就是你得到了较宽的类型
1
是一个
int
且比
char
更宽,因此您应该期望得到一个
int
结果。当您将一个更宽的类型添加到一个狭窄的类型时,您可能会得到一个更宽的类型
1
是一个
int
并且比
char
更宽,因此您应该期望得到
int
结果。这!哈哈,这就是为什么!非常感谢,这很好地解释了这一点!那意味着我今晚会睡得很好。。再次感谢你!没问题!尽可能地接受答案!Java使用Unicode而不是ASCII!在字符串和字符中,它使用一种称为UTF-16的Unicode编码。字符是一个UTF-16代码单元,其中一个或两个包含一个代码点的值,该代码点是标识字符集中字符的数字。根据设计,Unicode是ASCII的超集,对常用字符使用相同的代码点。Character类告诉我们一个代码单元是一个完整的代码点还是一对完整的代码点中的一个;我想我明白了。。因此,我将把这个标记为答案,因为评论澄清了为什么上述内容对于我所问的问题是正确的。。。我不知道。将改变答案以反映这一点。这!哈哈,这就是为什么!非常感谢,这很好地解释了这一点!那意味着我今晚会睡得很好。。再次感谢你!没问题!尽可能地接受答案!Java使用Unicode而不是ASCII!在字符串和字符中,它使用一种称为UTF-16的Unicode编码。字符是一个UTF