将unsigned long强制转换为uint8_t

时间:2019-01-24 21:07:33

标签: c++

我有以下代码:

#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吗?谢谢

0 个答案:

没有答案