如何检查 int32_t 数是否适合 int8_t 和 int16_t?

Mic*_*tev 4 c c++ clang

我有一个 int32_t 号,我需要检查它是否适合 int8 和 in16,但是当我尝试时:

    if (number ==(int32_t)((int8_t) number)) {
    printf("%s %d\n","8", number);
    
} else if (number ==(int32_t)((int16_t) number)){
    printf("%s %d\n","16", number);
    
Run Code Online (Sandbox Code Playgroud)

编译器说第一个 if 语句总是正确的,但我不知道如何以其他方式做到这一点,只使用“==”和诸如 << >> 之类的位操作。和 <stdint.h>。

Rei*_*old 8

从 C++ 20 开始,您可以这样做:

std::in_range<std::int8_t>(-1)
Run Code Online (Sandbox Code Playgroud)

这里