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

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

Восстановить пароль Регистрация
 
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
01.09.2008, 18:16     Переписать код без использования операций сдвига и "битового and" #1
как переписать
Код
(num & ((1) << k)) != 0
не используя операцию & и <<? Помогите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2008, 18:16     Переписать код без использования операций сдвига и "битового and"
Посмотрите здесь:

C++ Контейнерный класс типа "Список" без использования STL
C++ Как принять код клавиши, а вписать саму клавишу? (Принимает "57", что означает "9")
C++ Что означает "Программа "[4872] laba!.exe: Машинный код" завершилась с кодом 3 (0x3)."?
C++ Определить суму цифр заданного числа без использования операций целочисленного деления
Атомарна ли операция битового сдвига? C++
C++ Сдающий карты. "cards_remaining--" одинаково работает и с "--", и без
C++ Переписать элементы массива "X" в массив "Y" и подсчитать их количество
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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"
Еще ссылки по теме:

Переписать в файл О все элементы файла К с заменой в них символа "0" на символ "1" и наоборот C++
Переписать в файл О все элементы файла К с заменой в них символа "0" на символ "1" и наоборот C++
C++ Графы, переписать программу без использования iterator-ов
Написать код шифрования методом "Змеиный" и "Спиральный" C++
C++ Переписать программу без использования указателей

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

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

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