我正在读一本书,我发现了这个:
int tiles = ch - 'A';
其中ch
是一个字符。
我不明白两个字符之间的操作是如何产生整数的?
答案 0 :(得分:6)
char
变量实际上作为数值存储在内存中。根据特定的编码(通常为ASCII Table),该数字代表特定字符(a
,b
,é
,...)。
例如:
Decimal Char
----------------
65 A
66 B
... ...
您可以使用char
变量,就像它是一个数字变量一样。它将自动转换,并具有代表char
的数值。反之,数值可以解释为char
。
// The ASCII code for 65 is A
int result = 100 - 'A';
System.out.println ("100 - A is " + result); // Prints 35
System.out.println("ASCII code for 65: " + (char)65); // Prints A
以上是上述代码的Ideone demo。
根据JLS,5.6.2. Binary Numeric Promotion部分和5.1.2. Widening Primitive Conversion部分详细了解详情:
对原始类型的19个特定转换称为扩展 原始转换:
- ...
- char to int,long,float或double
- ...
答案 1 :(得分:3)
您可以阅读here:
char:char数据类型是一个16位Unicode字符。它有 最小值'\ u0000'(或0)和最大值'\ uffff'(或 65,535(含))。
所以我们可以看到,内部的char存储为数值。而且,正如您可以阅读here
char,在数值运算中被视为无符号的两个字节 整数
此外,在oracle docs about conversion中,我们可以看到char to int是扩展原语转换之一,同时:
Java会自动将char值转换为int值(和 反之亦然。如果有必要的话。
Java在必要时执行另一个隐式转换:char是 隐式转换为int(根据ASCII中的值) 表)。所以在'A'+ 1中,char'A'首先被隐式转换为 int 65这样就可以将它添加到int 1中,最终生成一个int 结果66.实际上,在表达式1.5 +'A'中,'A'是第一个 隐式转换为int 65然后隐式转换为 双65.结果最终产生了双66.5。
最后,表达式'5' - '0'隐式转换两个char值 to int(分别为53和48:参见ASCII表),然后执行 减法:在这种情况下的结果是int 5.事实上,如果我们 声明char d ='8'; (或任何其他字符),然后 写d-'0'会得到一个等于数字的int(在这种情况下) 8)。请注意,ASCII值“8”为56,“0”为48。
答案 2 :(得分:1)
每个字符都有一个ascii值(一个整数)。换句话说,每个角色都有一个代表它的数字。做手术' ch - A'会给你一个介于0到26之间的数字,从而产生一个“&”的数字。在A和Z之间。