Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > первые 3 бита байта равны 110?


Автор: GQU 16.11.2015, 17:17
Как определить, первые 3 бита байта равны 110 или нет?

Автор: konshyn 16.11.2015, 18:45
Младшие, можно, например так:
if (x % 8 == 0b110) {
...
}

старшие, если это переменная именно 1 байт, то так:
if (x >> 5 == 0b110) {
...
}



Автор: Sajtran 17.11.2015, 11:29
Код

if ((x & 0b110) == 0b110) {
...
}


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/pervyye-3-bita-bayta-ravny-110-id5649e59cae20151a7f8b4567#findElement_E7045_564ae57fae2015bf358b45f2_0

Автор: math64 17.11.2015, 12:49
Цитата(konshyn @  16.11.2015,  18:45 Найти цитируемый пост)
старшие, если это переменная именно 1 байт, то так:
Код

if (x >> 5 == 0b110) {
...
}

Но можно обойтись и без >>:
Код

if ( (x & 0xE0) = 0xC0) { ... }


Автор: konshyn 17.11.2015, 14:04
Цитата(Sajtran @  17.11.2015,  11:29 Найти цитируемый пост)
    
Код

if ((x & 0b110) == 0b110) {
...
}

Не подойдет. Контр-пример: 0b00000111


Цитата(math64 @  17.11.2015,  12:49 Найти цитируемый пост)
Оператор >> имеет больший приоритет, чем ==, поэтому нужно ставить скобки.

Все верное, оператор >> имеет больший приоритет. Поэтому он сначала сдвигает вправо на 5 бит, а потом сравнивает. После сдвига будет 0b00000xxx. Скобки необязательны, но можно и поставить, если очень хочется.

Цитата(math64 @  17.11.2015,  12:49 Найти цитируемый пост)
Но можно обойтись и без него:
Код

if ( (x & 0xE0) = 0xC0) { ... }

наверное, имелось в виду ==


Автор: Sajtran 18.11.2015, 07:08
точно, ступил, маску по значимым битам и сравнивать желаемое

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/pervyye-3-bita-bayta-ravny-110-id5649e59cae20151a7f8b4567#findElement_E7045_564bf9d0ae2015f8048b5c97_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)