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

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

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

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

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

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

Как переписать код без использования set? - C++
template &lt;class T&gt; // шабло обработки данных array&lt;char&gt; array&lt;T&gt;::proceed() { std::set&lt;char&gt; set; // старый ...

Контейнерный класс типа "Список" без использования STL - C++
Есть базовый класс Component и три производных от него класса: Chipset, SoundCard и VideoAdapter. Нужно описать контейнерный класс Computer...

Как создать виртуальный метод на С++ без использования слова "virtual"? - C++
ключевого слова &quot;virtual&quot;?

Написать реализацию файла "BinInOut.h" для битового представления числа - C++
здравствуйте вот есть программа мне нужно представить числа побитово и вот программа но оказывается теперь BinInOut.h не работает может...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Переписать в файл О все элементы файла К с заменой в них символа "0" на символ "1" и наоборот - C++
Помогите создать файл К,элементы которого являются символьными. Переписать в файл О все элементы файла К с заменой в нх символа 0 на символ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
01.09.2008, 19:13 #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) ........
Код кривой,работает медленней,но работает.Думаю,ты понимаешь о чем тут?)
0
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
02.09.2008, 14:28  [ТС] #3
нет, я не совсем понимаю о чем тут...а можно объяснить мне на моем примере? просто у меня именно таких очень много ситуаций...пожалуйста!
0
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
02.09.2008, 17:29 #4
Легко.
Операция << - это побитовый сдвиг влево. Фактически, сдвиг влево - умножение на два. Поскольку числа в двоичном виде и все переходят в следующий разряд. Если сдвигаем нес-ко раз,умножение на 2^k
Операция >> - сдвиг вправо. То же,только на два делим.
Операция & - побитовое "и". Бит результата равен 1,если соответствующие биты операндов оба 1.В противном случае он равен ноль.
Цикл while на каждом проходе выделяет следующий бит из каждого операнда,и сравнивает.Если находит две совпадающих единицы - останавливается. Если так и не нашел - условие не выполнено.

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

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

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

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

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

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

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

Атомарна ли операция битового сдвига? - C++
Система: Win7 x64. Один проц Intel i7 3770k. Предположим, что я в студии собираю 64-х битным компилятором проект, в котором есть: ...

Переписать элементы массива "X" в массив "Y" и подсчитать их количество - C++
Массив: Х(70) Условия и ограничения:-1≤Хi≤1 Переписать элементы массива &quot;X&quot; в массив &quot;Y&quot; и подсчитать их количество на языке С++ ...

Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон" - C++
Есть класс бинарного дерева, в нем структура. Класс - Tree, структура - list(листик, а не список). При компиляции выдает...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.09.2008, 18:40
Ответ Создать тему
Опции темы

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