LINUX.ORG.RU

Побитовые операции в С++


0

0

немогу победить задание:

В двухбайтовом шестнадцатиричном выражении F4A0 & (2FF1 OR -5A)&(-9EF)
а). проверить, установлен ли 8-й или 12-й бит.
б). проверить, установлены ли 8-й и 12-й биты.
в). установить 5-й и 13-й биты, сбросить 2-й, 7-й и 10-й биты.
г). разложить результат на старший и младший байты.
Прошу помощи.

0) Вычисляешь выражение
1) Умножаешь на 1 0001 0000 0000.
2) Умножаешь на 1 0001 0000 0000 и исключающе ксоришь это дело опять на 1 0001 0000 0000.
3) Складываешь с 10 0000 0010 0000; умножаешь на 11 0111 1011.
4) Сдвигаешь вправо на 8 позиций и умножаешь на FF; Сдвигаешь влево на 8 позиций.

Где мои 2000$?

yoghurt ★★★★★
()

Если хочешь какой-то реальной помощи, есть смысл рассказать, что ты делал и что у тебя не получилось.

metar ★★★
()
Ответ на: комментарий от metar

> Если хочешь какой-то реальной помощи, есть смысл рассказать, что ты делал и что у тебя не получилось.

FAIL

mannaz
()
Ответ на: комментарий от metar

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

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Мое сообщение родилось только потому, что припомнил, так ТС генерировал топики подобного содержания, явно не демонстрируя желания самому чего-нибудь поделать. Надо ж как-то пояснить человеку, что он выбрал путь тролля.

metar ★★★
()
Ответ на: комментарий от yoghurt

следующий вопрос от ТС будет — почему я умножаю на маску и получаю ненулевой результат

Reset ★★★★★
()

Кстати, а причем здесь С++? В калькуляторе или на бумажке такое сделать никак нельзя?

metar ★★★
()
    u16_t i = F4A0 & (2FF1 OR -5A)&(-9EF);
    u8_t j[2];

а    if ((i & (1 << 7)) || (i & (1 << 11)))
б    if ((i & (1 << 7)) && (i & (1 << 11)))
в    i = i | ((1 << 4) + (1 << 12)) & ~((1 << 1) + (1 << 6) + (1 << 9))
г    j[0] = i & 0xff; j[1] = i >> 8;
anonymous
()
Ответ на: комментарий от anonymous

Если нумерация битов с нуля имеется ввиду - то подставь соответственно

if ((i & (1 << 8)) || (i & (1 << 12))) и далее по аналогии. Я дословно по заданию написал :)

anonymous
()
Ответ на: комментарий от anonymous

Согласен - даже если скобки не нужны :) Так легче для понимания и чтения - блистать знанием приоритетов нужно на экзаменах :) я лично не помню точно :)

anonymous
()
Ответ на: комментарий от anonymous
u16_t i = F4A0 & (2FF1 OR -5A)&(-9EF); 
    u8_t j[2]; 
 
а    if ((i & (1 << 7)) || (i & (1 << 11))) 
б    if ((i & (1 << 7)) && (i & (1 << 11))) 
в    i = i | ((1 << 4) + (1 << 12)) & ~((1 << 1) + (1 << 6) + (1 << 9)) 
г    j[0] = i & 0xff; j[1] = i >> 8; 

Че за тип данных u16_t? И какую библиотеку нужно подключить для его определения.

shmel210
() автор топика
Ответ на: комментарий от yoghurt

>s/исключающе ксоришь/ксоришь/ obvious fix

s/исключающе ксоришь/исключающе илишь/

;)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.