[英]Compare uint8_t and uint16_t in c++
我想测试输入变量的值是否通过一个字节大小或知道,所以我写这段代码
{
uint8_t x;
cout << " enter x" << endl;
cin >> hex >> x;
cout << hex << x;
uint8_t y ;
y = x >> 4 ;
cout << hex << y;
if ( y == 0 )
{
cout << " succes, coorect value for x";
}
if (y > 0)
{
/*here i supoosed that x = 0xfff and when shifting, y would be 0xff but y is uint8 so it's just for compare
std::cout << "fail, ";
}
return 0;
}
我想知道如何测试用户是否在uint8中键入两个或更多字节。 并告诉他只键入一个字节的值。这就是为什么我尝试将uint8_t与uint16_t进行比较。
上面的代码的问题在于,您正在测试unsigned integer
的negative
。 if(y < 0)
部分将始终为false。
现在,据我所知,您希望过滤大于1Byte
值。 您知道,对于给定的byte
您具有2^8 - 1
8-1的值范围,即,无符号数位于[0-255]
的范围内。 这样,您的问题就可以简化为简单的检查,也就是说, if the input value is greater than 255, throw away that input
。 (Ofc您必须检查< 0
值)
还有其他解决方案,但是没有任何上下文,我无法提供准确的答案。 希望以上简化对您有所帮助。
为了检查值是否在小类型的范围内,您必须首先将其分配给更大的类型。 您根本无法使用小类型本身进行检查,因为它永远不会包含您要检查的太大的值。
uint16_t tempX;
uint8_t x;
cin >> hex >> tempX;
if (tempX > 0xff)
cout << "error";
else
x = (uint8_t)tempX;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.