std::hex 输入格式是否可以支持带有二进制补码表示法的负 int16_t 十六进制字符串,例如“ffff”代表“-1”?

2024-05-07

我想输入一个文本字符串ffff to a int16_t,该值应该是-1.

这是一个简单的测试 C++ 程序:

#include <iostream>
#include <iomanip>
#include <stdint.h>

int main() {
    int16_t num;

    std::cout << "Enter a hexadecimal number: ";
    std::cin >> std::hex >> num;

    std::cout << "Decimal representation: " << num << std::endl;

    return 0;
}

这是程序的结果:

Enter a hexadecimal number: ffff
Decimal representation: 32767

你看,结果值32767是最大的值int16_t.

所以,我的猜测是该行std::cin >> std::hex >> num;不支持二进制补码 https://en.wikipedia.org/wiki/Two%27s_complement十六进制格式的表示法?


另外,为了解决这个问题,您可以将 num 转换为 uint16_t ,然后在使用时将 num 转换为 int16_t 。

uint16_t num;
std::cin >> std::hex >> num;
std::cout << (int16_t)num;
return 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::hex 输入格式是否可以支持带有二进制补码表示法的负 int16_t 十六进制字符串,例如“ffff”代表“-1”? 的相关文章

随机推荐