Сравните uint8_t и uint16_t в C ++ - PullRequest
0 голосов
/ 06 июня 2018

Я хотел бы проверить, если значение входной переменной прошло один байт или знаю, поэтому я пишу этот код

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

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Чтобы проверить, находится ли значение в диапазоне малого типа, вы должны сначала присвоить его большему типу.Вы просто не можете выполнить проверку самого маленького типа, потому что он никогда не может содержать слишком большое значение, которое вы хотите проверить.

uint16_t tempX;
uint8_t x;
cin >> hex >> tempX;
if (tempX > 0xff)
    cout << "error";
else
    x = (uint8_t)tempX;
0 голосов
/ 06 июня 2018

Проблема с приведенным выше кодом заключается в том, что вы проверяете значение negative в unsigned integer.Часть if(y < 0) всегда будет ложной.

Теперь, насколько я понимаю, вы хотите отфильтровать значения, которые больше 1Byte.Вы знаете, что для данного byte у вас есть 2^8 - 1 диапазон значений, то есть число без знака лежит в диапазоне [0-255].Таким образом, ваша проблема сводится к простой проверке, то есть if the input value is greater than 255, throw away that input.(Ofc вы должны проверить для < 0 значений)

Есть другие решения для этого, но без какого-либо контекста я не могу дать точный ответ.Надеюсь, что приведенное выше упрощение поможет.

...