• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Битовые операции с++

  • Автор темы HackER
  • Дата начала
H

HackER

Задача: Если в принятом числе количество единиц в два раза больше чем количество нулей (без учета незначительных нулей), то выполнить арифметический сдвиг регистра вправо на один бит. В противном случае выполнить инкремент по модулю 65 (при некорректном коде установить младшие 6 бит в нулевое состояние)

Вопрос как?...Буду благодарен если ктото поможет
 
M

marikk

Наверно уже опоздал, но все же. Не помню уже, что такое инкремент по модулю.
Код:
#include <stdio.h>

int main  (int argc, char **argv)
{
 int a=4588, i=0, coutE=0, coutI=0; // (а - тестируемое число, i -счетчик, coutE - количество единиц, coutI - количество нулей)
 int limit = sizeof(a)*8-1;
 for (i; i < limit; i++) {  // в цикле считается количество нулей и единиц
  a= a<<1;
  if (a < 0) {
   coutE++;
   for (++i; i < limit; i++) {
    a= a<< 1;
    if (a < 0) {
     coutE++;
    } else {
     coutI++;
    }
   }
  }
 }
 if ( coutE/coutI == 2) { // сравниваем
  printf ("%i \n", a >> 1);
 } else {
  printf ("%i \n", (a+1)%65);
 }
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!