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

Битовые операции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Быстрый ввод и вывод http://www.cyberforum.ru/cpp-beginners/thread924986.html
Добрый день. Прошу прощения за нубский вопрос, но все-таки... Хотелось бы узнать у гуру, какие операторы обеспечивают самый быстрой ввод и вывод в файл.
C++ Возможно ли работать с _CrtDumpMemoryLeaks() в MinGW? _CrtDumpMemoryLeaks() может работать в mingw или это только для студии? http://www.cyberforum.ru/cpp-beginners/thread924972.html
Шаблон функции, принимающей обычные массивы и объекты C++
Нужно чтобы функция одинаково хорошо принимала массив long и объект vector <string>, чтобы затем удалить повторяющиеся элементы, отсортировать и вернуть количество элементов в новом массиве. Как лучше всего обеспечить приём аргументов, итераторами? Программа: #include <iostream> #include <algorithm> #include <set> #include <vector> #include <iterator> using std :: cout; using std :: cin;...
C++ Класс вектор
Не могу разобраться с этим классом, прошу помощи и в объяснении(задание очень объёмное ещё), проблема с самим вектором тоже есть. Разработать класс вектор размерности n. Определить несколько конструкторов , в том числе и конструктор копирования. Реализовать методы для вычисления модуля вектора, скалярного произведения, сложения,вычитания, умножения на константу. Перегрузить операции сложения,...
C++ список (в программе обнуляются указатели на структуры) http://www.cyberforum.ru/cpp-beginners/thread924942.html
здравствуйте помогите найти ошибку, при возврате указателя на структуру из функции в функцию майн он обнуляется, это меня сбивает с толку разве указатель не сохраняет значение это же всего лишь адрес на объект вот код мною написанный #include<iostream> using namespace std; struct myst { char name; int money;
C++ Определить пересекаются ли окружности и найти среди них уединенные(в истории не нашел( ) Окружности задаются координатами X,Y их центров и радиусами R. Датчик случайных чисел вырабатывает характеристики N окружностей. Определить, имеются ли среди этих окружностей три попарно пересекающихся. Найти среди этих окружностей все уединенные. Добавлено через 6 минут Или киньте плиз ссылку с такой прогой)) подробнее

Показать сообщение отдельно
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.07.2013, 14:08     Битовые операции
лучше поясню в чем будет смыл. Для простоты переобозначу переменные так:
C++
1
rezult = (a == b) ? x : y;
так вот, предположим, что мы знаем разрядность всех переменных и она равна n.

a==b тогда и только тогда, когда ~(a^b) == 1...1 (все n единичек)

1. шаг.
Обозначим (временно) A = ~(a^b). Выделим в A все биты:
A & 1, (A >> 1) & 1,..., (A >> (n-1)) & 1
и ко всем выделенным битам применим операцию &:
AA = (A & 1) & ... & ((A >> (n-1)) & 1)

так вот если a==b, то AA == 1, иначе AA == 0.

Далее младший бит в AA ставим на все остальные позиции:
AAA = (AA & 1) | ((AA & 1) << 1) | ... | ((AA & 1) << (n-1))
получим число 1...1 (число из всех единиц), если a==b, либо 0...0 (если a не равно b).
к полученному числу и x применяем &.

Половина выражения закончена, результатом которого будет либо x, либо 0.

2. шаг. Пусть B = (a^b)
ко всем выделенным битам числа B применим операцию |:
BB = (B & 1) | ... | ((B >> (n-1)) & 1)
при этом если a==b, то BB == 0, иначе BB == 1.

Далее младший бит в BB ставим на все остальные позиции:
BBB = (BB & 1) | ((BB & 1) << 1) | ... | ((BB & 1) << (n-1))
получим число 1...1 (число из всех единиц), если a!=b, либо 0...0 (если a==b).
к полученному числу и y применяем &.

А далее,
rezult = AAA & x | BBB & y;

вместо A, AA, AAA, BB, BBB можно вставлять выражения (то есть не будет лишних переменных), но выражение будет ОГРОМНЫМ.
 
Текущее время: 01:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru