比较 C++ 中的uint8_t和uint16_t

Compare uint8_t and uint16_t in c++

本文关键字:uint16 uint8 C++ 中的 比较      更新时间:2023-10-16

我想测试输入变量的值是否传递了一个字节大小或知道,所以我写了这段代码

{
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;