[英]error: cast from ‘uint8_t* {aka unsigned char*}’ to ‘unsigned int’ loses precision [-fpermissive]
[英]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.