繁体   English   中英

在C ++中比较uint8_t和uint16_t

[英]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 integernegative 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM