正如标题所假设我试图将十六进制数字(如0x320000dd)转换为十进制数字。 我的代码仅适用于正数,但在代表负十进制数的十六进制数字时失败。以下是我的代码的摘录:
cin>>hex>> x;
unsigned int number = x;
int r = number & 0xffffff;
我的输入以十六进制表示,计算机会自动将其转换为整数。我想要做的是获取十六进制数的操作数,所以最后24位。 你能帮助我让我的代码适用于负值,如:0x32fffdc9或0x32ffffff吗?非常感谢!
编辑:
我希望我的输出为: 0x32fffdc9 - > -567 要么 0x32ffffff - > -1
所以只是普通的十进制值,但它给了我16776649和16777215作为上面的例子。
答案 0 :(得分:1)
负整数通常存储在2's complement中意味着如果未设置最高有效位(MSB),则数字不为负数。这意味着正如您需要取消设置数字的8-MSB以将32位数字钳位到24位正数,因此您需要设置 8-您的号码的MSB将被限制为负数:
const int32_t r = 0x800000 & number ? 0xFF000000 | number : number & 0xFFFFFF;
vector<bool>
或bitset
可能值得您考虑,因为它们会将十六进制数字澄清到要设置的位范围。