このコードが機能しないのはなぜですか?
int x;
cin >> x;
私の入力で0x1a
それを取得しx == 0
、ではありません26
。
なんで?
ヘックスを使用するには、次のようなことをする必要があると思います。
cin >> hex >> x;
cout << hex << x;
16進数をdecやoctなどに置き換えることもできます。
実際には、>>
オペレーターにプレフィックス0
とを取得して適切に解釈させることができます0x
。のデフォルト設定を削除するだけですstd::cin
:
std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);
ここで、0x1a を入力すると 26 が返されます。
そのように考え<<
て>>
使用するときstd::cout/std::cin
:
std::cout << x
から値を取得することを意味します x
std::cin >> x
に値を入れることを意味します x
オペレーターが指している方向に注意してください。それはあなたにこれらの関数を使うとき彼らが何をするかについてのヒントを与えるはずです。
結果として26ではなく0を取得する理由はstd::cin
、入力からすべての非数値文字を解析するためです。結局のところ、 intであり、16進数の一部としてx
認識されません。0x
入力があった場合も同じ動作をします9x2
(結果は単純になります9
)。
コードは次のようになります。
int x;
cin >> hex >> x;
デフォルトでcin
は、読み込まれる数値はすべて10進数であると想定されます。明らかに、0x1a
は有効な小数ではないため、変換を実行できません。これを機能させるには、10進数ではなく16進数からの数値変換を期待するように求めるストリーム修飾子 を使用する必要があります。hex
cin
この0x
場合、プレフィックスはオプションであるため、入力10
は10進数の16として読み取られて格納されます。