使用C++ hex和cin

jas*_*ine 4 c++ hex decimal

如果您有以下代码:

cout << hex << 10;
Run Code Online (Sandbox Code Playgroud)

输出为'a',表示十进制10转换为十六进制值.

但是,在下面的代码中......

int n;
cin >> hex >> n;
cout << n << endl;
Run Code Online (Sandbox Code Playgroud)

当输入为12时,输出变为18.任何人都可以解释转换的细节吗?它是如何成为小数值的?

我对它成为一个int的兴趣感兴趣.如果分解,那将是:

(( cin >> hex ) >> n);
Run Code Online (Sandbox Code Playgroud)

它是否正确?

小智 8

十六进制操纵器仅控制如何读取值 - 它始终使用相同的内部二进制表示来存储.变量无法"记住"以十六进制输入.

  • @jasonline当它被读取时,它被读作两个字符"1"和"2" - iostream库将它们转换为数字,将它们视为十六进制数字,因此它们表示的值是16*1 + 2.这是然后存储为十进制值为18的二进制数. (2认同)

Dom*_*ger 6

十六进制中的"12"是十进制的"18".当您将"12"放入十六进制cin流时,内部值为十进制18.当您输出到默认十进制的流时,您会看到十进制值 - "18".


Tro*_*nic 6

它读取0x12(十六进制值)并将其存储在n中,然后以十进制形式打印.变量只包含值,它们不包含有关基数的信息(实际上它们将所有内容存储在基数2中).