c++ std::hex输入格式是否支持带二进制补码的负数int16_t十六进制字符串,例如`ffff`表示`-1`?

8ehkhllq  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(197)

我想输入一个文本字符串ffffint16_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

结果值32767int16_t
所以,我猜行std::cin >> std::hex >> num;不支持十六进制格式的Two's complement表示法?

lstz6jyr

lstz6jyr1#

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

uint16_t num;
std::cin >> std::hex >> num;
std::cout << (int16_t)num;
return 0;

相关问题