Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Kristina_S
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
1

Объясните перебор всех значений от 0 до n с помощью битовых операций

29.11.2015, 15:14. Просмотров 1239. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
for (int i = (1 << n) - 1; i >= 0; i--)
    {
        for (int j = 0; j < n; j++)
        {
            if (i & (1 << j))
Этот кусок кода означает перебор всех значений от 0 до n
Но ,Сколько бы не читала про эти битовые операции,суть этих соль этих строк понять не могу.Суть вопроса
Объяснить как работает каждый цикл.И как это мы можем на каждой итерации 1 (в первом форе) сдвигать на бит,если значение ее и так 1.
Спасибо
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2015, 15:14
Ответы с готовыми решениями:

Найти произведение 2 чисел с помощью битовых операций
Помогите пожалуйста, не понимаю задание.... Заданы два числа &lt;=16. Найти их произведение и с...

С помощью битовых операций запишите число в ячейку памяти минимального размера
Дано пятизначное число. (Может быть например такое 00001). С помощью битовых операций запишите его...

С помощью только битовых операций превратите последний 0 в 1, а все остальное превратить в 0
С помощью только битовых операций(еще и без циклов, проверок, инкремента и смени знака) превратите...

Перебор всех открытых форм с помощью Forms
Ну, не хотят формы закрываться с помощью перебора всех открытых форм: For Each frm In Forms...

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

6
zss
Модератор
Эксперт С++
9105 / 7886 / 4860
Регистрация: 18.12.2011
Сообщений: 21,045
Завершенные тесты: 1
29.11.2015, 15:19 2
Цитата Сообщение от Kristina_S Посмотреть сообщение
1 << n
Означает сдвинуть единичку на n позиций влево(т.е. получить число, у которого в n- ом разряде единичка).
Цитата Сообщение от Kristina_S Посмотреть сообщение
if(i & (1 << j))
Означает проверить состояние j-го разряда. Т.е., если j-ый разряд равен единице - условие истинное.
0
Kristina_S
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
29.11.2015, 15:21  [ТС] 3
ну а как ее сдвинем на n позиций,Ведь единичка это же не 10 и не 100 у нее всего 1 разряд
0
zss
Модератор
Эксперт С++
9105 / 7886 / 4860
Регистрация: 18.12.2011
Сообщений: 21,045
Завершенные тесты: 1
29.11.2015, 15:25 4
Но это ведь целочисленная константа, когда ее загрузят в регистр она будет занимать все машинное слово, т.е. минимум 32 бита.
0
Kristina_S
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
29.11.2015, 15:27  [ТС] 5
int a[] = { 1, 2, 3, 4 }, n = sizeof(a) / sizeof(a[0]);
а чтобы перевести из целочисленной в биты надо использовать что-то вроде этого,это означает что мы каждый элемент массива а в битах делим на его 0-вой элемент в битах,или как?
0
zss
Модератор
Эксперт С++
9105 / 7886 / 4860
Регистрация: 18.12.2011
Сообщений: 21,045
Завершенные тесты: 1
30.11.2015, 08:36 6
Вопрос непонятен
0
Байт
Эксперт C
22546 / 14264 / 3000
Регистрация: 24.12.2010
Сообщений: 30,372
30.11.2015, 09:23 7
Kristina_S, Какое отношение имеет пост 5 к посту 1 ? И на какой вопрос отвечать?
По проводу поста 5 могу сказать, что sizeof к битам никакого отношения не имеет. Он в БАЙТАХ (можете мне поверить )
Цитата Сообщение от Kristina_S Посмотреть сообщение
n = sizeof(a) / sizeof(a[0]);
n = размер всего массива / размер одного элемента = количество элементов
А по поводу поста 1... Пусть n = 5.
(1 << n) = 100000 (двоичное)
(1 << n) - 1 = 011111
Вот от этого мы и вычитаем в цикле по единичке...

Добавлено через 7 минут
Если я, конечно, правильно понял вопросы...
0
30.11.2015, 09:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2015, 09:23

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

Реализация битовых операций в Си++
По теме: Реализация битовых операций в Си++. Даны два неравных числа: n и m, не превосходящие 31....

Применение битовых операций
Когда нужно применять битовые операции? Как они работают разобрался, но когда применять - нет В...

Реализация битовых операций
IntA=10; A=A&amp;0F; A=A|03; A=A&lt;&lt;1 Чему будет равно A?


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

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

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