Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
1

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

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

как переписать
Код
(num & ((1) << k)) != 0
не используя операцию & и <<? Помогите, пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2008, 18:16
Ответы с готовыми решениями:

Переписать функцию без использования битового сдвига
Здравствуйте , нужно заменить побитовый сдвиг в функции Crossover, так чтобы эта функция вертала...

Как записать 1<=k<=180 без использования "if" и "else"?
как записать 1&lt;=k&lt;=180 без использования &quot;if&quot; и &quot;else&quot;, на С, не на С++?

Как скомпилировать код без применения "решение" и "проект"?
Как скомпилировать код на C# написанный в VS 2019 без применения &quot;решение&quot; и &quot;проект&quot;?

Переписать код без использования цикла
Sub ex3() Dim sNum As String, i As Integer, j As Integer, otvet As Boolean sNum =...

8
Эксперт С++
2250 / 765 / 25
Регистрация: 27.05.2008
Сообщений: 1,497
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
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
02.09.2008, 14:28  [ТС] 3
нет, я не совсем понимаю о чем тут...а можно объяснить мне на моем примере? просто у меня именно таких очень много ситуаций...пожалуйста!
0
Эксперт С++
2250 / 765 / 25
Регистрация: 27.05.2008
Сообщений: 1,497
02.09.2008, 17:29 4
Легко.
Операция << - это побитовый сдвиг влево. Фактически, сдвиг влево - умножение на два. Поскольку числа в двоичном виде и все переходят в следующий разряд. Если сдвигаем нес-ко раз,умножение на 2^k
Операция >> - сдвиг вправо. То же,только на два делим.
Операция & - побитовое "и". Бит результата равен 1,если соответствующие биты операндов оба 1.В противном случае он равен ноль.
Цикл while на каждом проходе выделяет следующий бит из каждого операнда,и сравнивает.Если находит две совпадающих единицы - останавливается. Если так и не нашел - условие не выполнено.

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

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

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

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

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

Добавлено через 59 секунд
вот как переписать (x&y)?
0
Эксперт С++
2250 / 765 / 25
Регистрация: 27.05.2008
Сообщений: 1,497
02.09.2008, 18:31 8
Я переписал. Исходя из того,как записываются числа в двоичной системе,получаем по очереди( в цикле) каждый разряд. Их и сравниваем. Код есть,если не понимаешь - напиши на бумаге,как записывается двоичное число,и математически попробуй выделить нужные цифры.(запись a0 *2^0 + a1*2^1+...+an*2^n).
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
02.09.2008, 18:40  [ТС] 9
окей, так и сделаю! Спасибо за помощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2008, 18:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Переписать код без использования async
Есть метод, нужно переписать его под обычный, чтобы программа подождала выполнения Идей 0..... ...

Переписать код без использования GOTO
Ребята, помогите пожалуйста переписать текст программы, чтоб в ней не использовать GOTO!!! ...

Переписать код без использования LINQ to XML
Подскажите пожалуйста аналогичную запись только используя стандартные средства языка C# var dates...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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