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を対応する 10 進数値 (0-9) に変換します。

「0」は 0 に、「1」は 1 に、というように変換されます。

于 2010-12-16T17:33:46.523 に答える
0

aix の答えは正しいですが、簡単な説明を追加させてください。

ry-'0'式を理解するには、式のさまざまなエンティティの型を調べることが重要です。おそらくその前に、減算、つまり式またはx から y を差し引いxyryの種類を見ていることを認識しておく必要があります。'0'

ryint0ですchar。Java では、 へのアップキャストが可能charですintx - yのような算術式が機能するには、xyが同じ型である必要があります。あなたの場合、あなたは持っています

ry - '0'

つまり、int - char型に関する限りです。したがって、Java VM は自動的に char を int にキャストし、マイナスの両方の引数を型ごとに一致させます。これが、戻り値が型である理由でもありintます。rz の宣言を からint rzに変更することで確認できます。コンパイルは、明示的なキャストなしで a (減算の結果) を変数 (rz)char rzに代入しようとしていると不平を言います。intchar

于 2010-12-16T18:20:20.500 に答える