C++ 在C+中使用std::cout打印uint8_t变量+;
在下面的代码中,C++ 在C+中使用std::cout打印uint8_t变量+;,c++,cout,C++,Cout,在下面的代码中,std::cout似乎没有正确打印uint8\t类型的变量 int main() { uint8_t var = 16; std::cout << "value: " << var << std::endl; } 我对类似的uintX\t类型没有问题 我知道我在这里遗漏了一些东西,但我不知道它是什么。uint8\u t映射到大多数系统上的无符号字符。结果,将调用将16解释为不可打印字符的覆盖。将强制转换添加到int以查看数值:
std::cout
似乎没有正确打印uint8\t类型的变量
int main() {
uint8_t var = 16;
std::cout << "value: " << var << std::endl;
}
我对类似的uintX\t类型没有问题
我知道我在这里遗漏了一些东西,但我不知道它是什么。
uint8\u t
映射到大多数系统上的无符号字符。结果,将调用将16
解释为不可打印字符的覆盖。将强制转换添加到int
以查看数值:
std::cout << "value: " << (int)var << std::endl;
我怀疑这种隐式的字符转换正在进行。但是为什么呢?类型名uint8_t不建议它保持int形式吗?@narengiuint8_t
只是一个typedef
,而不是一个内置的基本类型。正因为如此,编译器无法区分对实际基元类型的重写和对typedef
-ed类型的重写:这是编译器的同一个函数代码>typedef无符号整数uint16代码>typedef无符号长整数uint32代码>typedef无符号长整数uint64
@narengi:[u]intN\t
类型所使用的预定义类型因系统而异。这就是为什么存在[u]intN\t
类型,因为预定义类型的大小不同uint16\u t
只有在int
为16位时才会被定义为unsigned int
,这对于托管系统来说是很少见的。@KeithThompson我明白你的意思。但我得到的信息是,[u]intX\t类型变量只是typedef,由各种内置类型定义,从char到int和long int等,不一定被视为整数类型。但是谢谢你的澄清。
std::cout << "value: " << (int)var << std::endl;