このコードが機能しないのはなぜですか?
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進数からの数値変換を期待するように求めるストリーム修飾子 を使用する必要があります。hexcin
この0x場合、プレフィックスはオプションであるため、入力10は10進数の16として読み取られて格納されます。