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;
cout11110000
被解释为十进制数
其二进制表示形式为:
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溢出了