3 回答

TA贡献1796条经验 获得超7个赞
只需将 char 转换为 ASCII 代码(在您的语句下方)
int x = '0' + 1 - '5'
48 + 1 - 53 = -4
int y = '5' - 0 + '1'
53 - 0 + 49 = 102
int y = '5' - '0' + '1'
53 - 48 + 49 = 54
注意它是一致的,每个 int 保持 int 并且每个 char 都转换为 ASCII 码

TA贡献1725条经验 获得超8个赞
char '0'
不等于int 0
。char '0'
的二进制表示占用 16 位:
0000 0000 0011 0000
whileint 0
的二进制表示占用 32 位:
0000 0000 0000 0000 0000 0000 0000 0000
当您将 achar
和 an相加时int
,char
将提升为int
第一个。
例如。char5
的unicode是0035
,在 binary 中0000 0000 0011 0101
,它会通过在头部插入 16 个零来提升为 int 0000 0000 0000 0000 0000 0000 0011 0101
,而 int53
用十进制表示。

TA贡献1831条经验 获得超4个赞
您可能正在混合值中的表示。这些值永远不会改变,因此当您执行算术运算时,它将始终是 '5'==53 而不是 5。对于在原语到字符串转换上显示 JLS。
对于大多数计算,整数算术被提升为 int。
System.out.println('5' + '0');
>>> 101
System.out.println((char)('5' + '0'));
>>> e
两个结果具有相同的数值,但其中一个显示为字符,因为它已转换为字符。
添加回答
举报