オーバーフローを防ぐために、ユーザーが入力できる最小値を最大ストリーム サイズから上位ビットを引いた値に制限したいと考えています。許可されたビット サイズをハード コードした場合、これは簡単ですが、ユーザー システムを利用してより動的にしたいと考えています。では、最大ストリーム長から最上位ビットを差し引くにはどうすればよいでしょうか?
これが私がこれまでに持っているものです:
// Get a decimal number from user and validate number entered
while((cout << "Enter decimal number: ") && !(cin >> number)){
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input. Try again\n";
}
次のような最小値の別のテストを追加する必要があると思います。
while((cout << endl << "Enter decimal number: ") && !(cin >> number) && !(number >= -numeric_limits<streamsize>::max())){
しかし、どういうわけかから最上位ビットを減算しますnumeric_limits<streamsize>::max()
私の場合、それは 31 ビット目ですが、別のマシンの誰かにとっては異なる場合があります。
助けてくれてありがとう。