以下がうまくいかない理由を誰か説明できますか?
#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 のままです。uint64_t の代わりに unsigned long long も使用してみました。
Windows Vista と、最近インストールされたばかりの code::blocks エディターを使用しています。
Windows XP を実行している別のマシンに code::blocks をインストールしようとしましたが、問題は同じです。
編集 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
ありがとう。