Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
#1

Переписать код без использования операций сдвига и "битового and" - C++

01.09.2008, 18:16. Просмотров 970. Ответов 8
Метки нет (Все метки)

как переписать
Код
(num & ((1) << k)) != 0
не используя операцию & и <<? Помогите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2008, 18:16     Переписать код без использования операций сдвига и "битового and"
Посмотрите здесь:
C++ Контейнерный класс типа "Список" без использования STL
C++ Как создать виртуальный метод на С++ без использования слова "virtual"?
Атомарна ли операция битового сдвига? C++
C++ Переписать элементы массива "X" в массив "Y" и подсчитать их количество
C++ Сдающий карты. "cards_remaining--" одинаково работает и с "--", и без
Написать код шифрования методом "Змеиный" и "Спиральный" C++
C++ Переписать программу без использования указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
01.09.2008, 19:13     Переписать код без использования операций сдвига и "битового and" #2
Разве в СИ нет побитовых операций?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int l1=l,lbit,numbit;
bool result=false;;
for(int i =0;i<k;i++) l1*=2;
i=1;
while(i<=l1) { // начинаем с первого разряда
    lbit  = (l1/i)%(2);// получаем нужный разряд
   numbit = (num/i)%2;// из обоих чисел
   if(lbit && numbit ) {// если оба 1 - условие выполнено
        result = true ;
        break ;
  }
   i*=2;//на следующий разряд
};
if(result) ........
Код кривой,работает медленней,но работает.Думаю,ты понимаешь о чем тут?)
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
02.09.2008, 14:28  [ТС]     Переписать код без использования операций сдвига и "битового and" #3
нет, я не совсем понимаю о чем тут...а можно объяснить мне на моем примере? просто у меня именно таких очень много ситуаций...пожалуйста!
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
02.09.2008, 17:29     Переписать код без использования операций сдвига и "битового and" #4
Легко.
Операция << - это побитовый сдвиг влево. Фактически, сдвиг влево - умножение на два. Поскольку числа в двоичном виде и все переходят в следующий разряд. Если сдвигаем нес-ко раз,умножение на 2^k
Операция >> - сдвиг вправо. То же,только на два делим.
Операция & - побитовое "и". Бит результата равен 1,если соответствующие биты операндов оба 1.В противном случае он равен ноль.
Цикл while на каждом проходе выделяет следующий бит из каждого операнда,и сравнивает.Если находит две совпадающих единицы - останавливается. Если так и не нашел - условие не выполнено.

Подробнее - к поисковикам
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
02.09.2008, 18:10  [ТС]     Переписать код без использования операций сдвига и "битового and" #5
XuTPbIu_MuHTAu, спасибо огромное! Последний вопрос...я правильно поняла, что

((1) << k) то же самое, что (1*(2 в степени k))?
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
02.09.2008, 18:14     Переписать код без использования операций сдвига и "битового and" #6
да. Поясню,как работает сдвиг,на примере байта

00010111
сдвиг влево (<<)на один : 00101110
сдвиг влево (<<)на два : 01011100

сдвиг вправо(>>) на один : 00001011

Сдвиг влево на один байт - умножение на два
на несколько байтов - несколько раз умножение на два. т.е умножение на 2^k
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
02.09.2008, 18:27  [ТС]     Переписать код без использования операций сдвига и "битового and" #7
XuTPbIu_MuHTAu, спасибо еще раз! про << и >> все понятно
а вот чем заменить операцию & я так и не поняла...

Добавлено через 59 секунд
вот как переписать (x&y)?
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
02.09.2008, 18:31     Переписать код без использования операций сдвига и "битового and" #8
Я переписал. Исходя из того,как записываются числа в двоичной системе,получаем по очереди( в цикле) каждый разряд. Их и сравниваем. Код есть,если не понимаешь - напиши на бумаге,как записывается двоичное число,и математически попробуй выделить нужные цифры.(запись a0 *2^0 + a1*2^1+...+an*2^n).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2008, 18:40     Переписать код без использования операций сдвига и "битового and"
Еще ссылки по теме:
C++ Графы, переписать программу без использования iterator-ов
Помогите переписать программу без использования индексации C++
C++ Определить суму цифр заданного числа без использования операций целочисленного деления
C++ Реализация класса "Множество" и операций над множествами
"динамическая строка" и перегрузка операций (класс) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
02.09.2008, 18:40  [ТС]     Переписать код без использования операций сдвига и "битового and" #9
окей, так и сделаю! Спасибо за помощь!
Yandex
Объявления
02.09.2008, 18:40     Переписать код без использования операций сдвига и "битового and"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru