谁能解释一下为什么以下内容对我不起作用?
#include <iostream>
#include <string>
#include <sstream>
#include <bitset>
using namespace std;
int main()
{
string tempString;
uint64_t tempValue;
cout << "enter addr in hex : ";
cin >> tempString;
istringstream ost(tempString);
ost >> hex >> tempValue;
bitset<64> addr(tempValue);
cout << "addr = " << addr << endl;
}
只有位集的最低 32 位设置正确。最高位保持为 0。我也尝试使用 unsigned long long 代替 uint64_t。
我正在使用 windows vista 和最近安装的 code::blocks 编辑器。
我尝试将 code::blocks 安装到另一台运行 windows xp 的机器上,但问题是一样的。
编辑2——
我将代码更改为以下
#include <iostream>
#include <string>
#include <sstream>
#include <bitset>
using namespace std;
int main()
{
string tempString;
uint64_t tempValue;
cout << "enter addr in hex : ";
cin >> tempString;
istringstream ost(tempString);
if (ost >> hex >> tempValue) cout << "ok" << endl; else cout << "bad" << endl;
ost >> hex >> tempValue;
cout << tempValue << endl;
bitset<64> addr(tempValue);
cout << "addr = " << addr << endl;
}
现在当我输入时,ffffffffff
我得到了输出
ok
1099511627775
addr = 0000000000000000000000000000000011111111111111111111111111111111
谢谢。