我有以下代码:
#include <iostream>
int main(void)
{
unsigned long x=2;
std::uint8_t y=static_cast<std::uint8_t>(x);
std::cout<<"aa:"<<x<<std::endl;
std::cout<<"bb:"<<y<<std::endl;
bool a = x==2;
bool b = y==2;
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
return 0;
}
当我运行它时,我得到以下输出:
aa:2
bb:(some weird ascii character)
1
1
让我感到困惑的是,当我将一个无符号的long(x)转换为uint8_t时,当我尝试打印以输出实际输出时,我注意到y的输出有些奇怪的ascii字符,而不是2 I会期望的。但是,当我用2进行布尔比较时,两者都比较为true。为什么我不能正确打印到uint8_t的无符号长整型到标准输出?我有什么误会?即使对于较小的值,在C ++中也不允许从unsigned long强制转换为uint8_t吗?谢谢