我想测试输入变量的值是否传递了一个字节大小或知道,所以我写了这段代码
{
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)
部分将始终是假的。
现在,根据我的理解,您要过滤大于1Byte
的值。您知道,对于给定byte
,您有2^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;