0

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

{
    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 进行比较的原因。

4

2 回答 2

0

为了检查一个值是否在一个小类型的范围内,你必须先将它分配给一个更大的类型。您根本无法对小类型本身进行检查,因为它永远不会包含您想要检查的太大值。

uint16_t tempX;
uint8_t x;
cin >> hex >> tempX;
if (tempX > 0xff)
    cout << "error";
else
    x = (uint8_t)tempX;
于 2018-06-06T14:04:20.707 回答
0

上面代码的问题是您正在测试negative. unsigned integerif(y < 0)部分将永远是错误的。

现在,根据我的理解,您想要过滤大于1Byte. 你知道,对于一个给定的值,byte你有一个2^8 - 1范围,也就是说,无符号数在范围内[0-255]。因此,您的问题被简化为一个简单的检查,即if the input value is greater than 255, throw away that input. (你必须检查< 0值)

还有其他解决方案,但没有任何上下文,我无法提供准确的答案。希望上面的简化有帮助。

于 2018-06-06T13:19:18.823 回答