繁体   English   中英

uint8_t强制转换为unsigned int时未打印正确的值

[英]uint8_t not printing the right value when casted to unsigned int

我所定义的uint8_t变量x和给它的值11110000 ,但是当我进行打印(它转换成一无符号整数,所以它不是不可见),它打印出112时它应该是240 我做错了什么 ?

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

简短代码:

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

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=0b11110000;

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

walls=0xF0;

另外,我只需要4位,但是我不知道任何类型只能提供4位,这就是为什么我使用uint8_t的原因。

实际上, uint8_t是您可以拥有的最小位数。

但是您可能想掩盖并且仅使用较低的半字节:

walls=0b000011111;

或对于c ++ 14之前的版本再次:

walls=0x0F;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM