0

我在某处看到了以下代码,我对 (ry-'0') 部分感到困惑。那有什么用?bis 是一个缓冲输入流,输入是一行多个整数,每个整数由一个空格分隔(即 1 2 3 4 5 6)。

static int num()throws IOException{
  rz=0;
  while((ry=bis.read())<'0' || ry>'9'){}
  rz+=(ry-'0');
  while((ry=bis.read())>='0' && ry<='9')
   rz=rz*10+(ry-'0');
  return rz;
 }
4

2 回答 2

3

ry-'0'将存储的 ASCII 字符 '0'-'9'ry转换为相应的十进制值 (0-9)。

'0' 转换为 0,'1' 转换为 1,依此类推。

于 2010-12-16T17:33:46.523 回答
0

aix 的回答是正确的,但让我添加一个小解释:

ry-'0'为了理解它,查看表达式的不同实体的类型很重要。好吧,也许甚至在此之前,我们必须意识到我们正在查看减法,即查看表达式或x 减 y类型,其中xryy'0'

ry是一个int0是一个char。在 Java 中,可以向上char转换为int. 要使x - y这样的算术表达式起作用,xy必须是相同的类型。在你的情况下,你有

ry - '0'

也就是说,int - char就类型而言。因此,您的 Java VM 将自动将 char 转换为 int,这将使减号的两个参数在类型上匹配。这也是返回值是 type 的原因int。您可以通过将 rz 的声明从int rzto更改来检查这一点char rz:然后编译器会抱怨您正在尝试将 a int(减法的结果)分配给char没有显式强制转换的变量(rz)。

于 2010-12-16T18:20:20.500 回答