1. ホーム
  2. c++

[解決済み] 4294967295(32bitでの最高値)はなぜ-1になるのですか?

2022-01-29 12:34:01

質問

私のコードには、次のような単純な部分があります。

int pch = name.find("#");
if(pch == name.npos) continue;

の場合 name.find が見つかりません。 "#" , pch は-1に等しい。 name.npos ではなく、印刷すると4294967295となります。なぜかというと、この場合 pch が-1であり name.npos4294967295 に入ると、プログラムは if の条件ですか?

解決方法は?

  • string::npos は、その位置が見つからないことを表す。通常、定数値で表される -1 .

参照

この定数は-1で定義されています。size_tは符号なし整数型なので、この型で表現可能な最大の値です。

  • 場合によっては find が失敗した場合は -1 .

つまり、どちらも同じで、あなたの場合、そして if が満たされます。

さて、答え合わせをすると

name.npos ではなく、印刷すると4294967295となります。

というのも string::npos は、型 size_t であり、通常は typedef から unsigned の型があります。は、その -1 を初期化するために使用されます。 unsigned として格納され、印刷されます。 符号なし値の最大値 .