整数和一个字符如何在同一个数学表达式中?

时间:2014-02-03 15:16:56

标签: java integer character

我正在读一本书,我发现了这个:

int tiles = ch - 'A';

其中ch是一个字符。

我不明白两个字符之间的操作是如何产生整数的?

3 个答案:

答案 0 :(得分:6)

char变量实际上作为数值存储在内存中。根据特定的编码(通常为ASCII Table),该数字代表特定字符(abé,...)。

例如:

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

根据JLS5.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是扩展原语转换之一,同时:

  • byte to short,int,long,float或double
  • 简称为int,long,float或double
  • char to int,long,float或double
  • int to long,float或double
  • 长期漂浮或加倍
  • 浮动加倍

more references

  

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之间。