C++ uint8\u t在强制转换为无符号整数时未打印正确的值

C++ uint8\u t在强制转换为无符号整数时未打印正确的值,c++,C++,我定义了一个uint8\u t变量x,并给它赋值11110000,但是当我打印它时(将它转换为无符号整数,这样它就不会不可见),它会在应该是240时打印出112。 我做错了什么 另外,我只需要4位,但我不知道任何类型只能提供4位,这就是为什么我使用uint8\t 简要代码: std::uint8_t walls; walls=11110000; cout << (unsigned int) walls <<endl; std::uint8_t墙; 墙=11110000;

我定义了一个
uint8\u t
变量x,并给它赋值
11110000
,但是当我打印它时(将它转换为无符号整数,这样它就不会不可见),它会在应该是
240
时打印出
112
。 我做错了什么

另外,我只需要4位,但我不知道任何类型只能提供4位,这就是为什么我使用
uint8\t

简要代码:

std::uint8_t walls;
walls=11110000;
cout << (unsigned int) walls <<endl;
std::uint8_t墙;
墙=11110000;

cout
11110000
被解释为十进制数

其二进制表示形式为:

1010 1001 1000 0110 0111 0000
由于您的变量是无符号的,并且溢出会导致环绕,因此将分配较低的8位

0111 0000
也就是112

要使用,只需按照注释中的建议添加
0b

walls=0b11110000

显然这是C++14的一部分。感谢@Daniel Kamil Kozar.

11110000
被解释为十进制数

其二进制表示形式为:

1010 1001 1000 0110 0111 0000
由于您的变量是无符号的,并且溢出会导致环绕,因此将分配较低的8位

0111 0000
也就是112

要使用,只需按照注释中的建议添加
0b

walls=0b11110000
显然这是C++14的一部分。感谢@Daniel Kamil Kozar

我做错了什么

您没有指定基数为2的值,而是指定基数为10的值,正如您在此处所想:

walls=11110000;
要指定基2值,请使用(至少使用c++14标准)

对于较旧的标准,可以使用

walls=0xF0;
此外,我只需要4位,但我不知道任何类型可以提供我只有4位,这就是为什么我使用uint8_t

事实上,
uint8\u t
是您可以拥有的最小位数

但您可能希望屏蔽并仅使用较低的半字节:

walls=0b000011111;
对于c++14之前的版本:

walls=0x0F;
我做错了什么

您没有指定基数为2的值,而是指定基数为10的值,正如您在此处所想:

walls=11110000;
要指定基2值,请使用(至少使用c++14标准)

对于较旧的标准,可以使用

walls=0xF0;
此外,我只需要4位,但我不知道任何类型可以提供我只有4位,这就是为什么我使用uint8_t

事实上,
uint8\u t
是您可以拥有的最小位数

但您可能希望屏蔽并仅使用较低的半字节:

walls=0b000011111;
对于c++14之前的版本:

walls=0x0F;

11110000不能解释为二进制。您正在溢出
uint8
11110000未被解释为二进制。您的
uint8溢出了