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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
HueJack
13 / 11 / 1
Регистрация: 20.10.2008
Сообщений: 91
#1

Поразрядные операторы - C++

28.07.2009, 19:20. Просмотров 2303. Ответов 9
Метки нет (Все метки)

Здравствуйте, объясните мне практическую ценность поразрядных операторов, не могу понять, зачем они нужны.. заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 19:20     Поразрядные операторы
Посмотрите здесь:

Поразрядные операторы сдвига - C++
Всем хорошо известно, что поразрядные операторы сдвига >> и << сдвигают все биты переменной вправо или влево. Во время сдвига битов в один...

Поразрядные операторы + небольшая шифропрограммка - C++
Начинаю изучать поразрядные операторы (и, или, исключающее или, не). В принципе все понятно, но при написании небольшой (детской)...

С++.Операторы в С++: условные операторы, операторы break и continue - C++
Выяснить, пересекаются ли параболы у=аx2+bx+с и у=dx2+ex + f. При положительном ответе найти точки пересечения.

«Языки и технологии программирования» «Операторы цикла. Условные операторы» - C++
Не получается сделать что бы программа выводила все значения в промежутке, она выводит только одно. условия | ((z^3)+sin...

Поразрядные операции - C++
Даны два int-числа: N1 = ABCD и N2 = EFGH, где AB…GH – 16 – ричные цифры. Образовать long-число DEGHDABF, используя только поразрядные...

Поразрядные операции - C++
Запрограммировать изменение четырехбайтного числа (unsigned int) так, чтобы байт последовательно заполнялся сначала единицами, а затем...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
28.07.2009, 19:25     Поразрядные операторы #2
не могу понять, зачем они нужны..
они нужны для операций с битами
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
28.07.2009, 19:34     Поразрядные операторы #3
Ну вот к примеру стандартная проверка на четность элемента
C++
1
2
3
    int a;
    if(a%2==0)
        std::cout<<a;
А вот так
C++
1
2
3
    int a;
    if(!(a&1))
        std::cout<<a;
Будет работать быстрее, потому что не выполняется никаких операций ни с элементом, ни с его адресом, а просто проверяется последний бит. Разница в быстродействии внушительная
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
28.07.2009, 19:41     Поразрядные операторы #4
M128K145, такие фишки современные компиляторы умеют сами оптимизировать. Если посмотреть ассемблерный листинг первого и второго варианта, то код там абсолютно идентичен (проверял на GCC).
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
28.07.2009, 19:56     Поразрядные операторы #5
Gravity,
Assembler
1
2
3
4
5
6
7
8
004114D7  mov         eax,dword ptr [a] 
004114DA  and         eax,80000001h 
004114DF  jns         main+46h (4114E6h) 
004114E1  dec         eax  
004114E2  or          eax,0FFFFFFFEh 
004114E5  inc         eax  
004114E6  test        eax,eax 
004114E8  jne         main+73h (411513h)
против
Assembler
1
2
3
00411513  mov         eax,dword ptr [a] 
00411516  and         eax,1 
00411519  jne         main+0A4h (411544h)
для MS VS 2005. В 2008 то же самое
Согласен, что вопрос пока все таки актуален?
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
28.07.2009, 21:19     Поразрядные операторы #6
Цитата Сообщение от M128K145 Посмотреть сообщение
Согласен, что вопрос пока все таки актуален?
он нисколько не актуален. преждевременная оптимизация только запутает код и сделает его "грязным". тем более программист в 99% случаев неправильно определяет критические к быстродействию участки кода. 80% времени выполнения программа проводит в 20% кода. и эти 20% определяются профайлером.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,968
Завершенные тесты: 1
28.07.2009, 21:30     Поразрядные операторы #7
Вы о чем спорите? Оптимизация конечно хорошая штука....
Вот я например получаю TCP пакет от железки, где каждый бит значит сработку конкретного датчика. Выигрыш по сравнению с передачей в байтах в 8 раз. Без побитовых операций я эти данные хрен расшифрую....вот и практическая ценность...
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 21:45     Поразрядные операторы #8
2M128K145: А ты сам внимательно посмотри на первый код. Где собственно вычисление по модулю 2 ? Компилятор заменил его на битовую операцию.

Добавлено через 1 минуту 28 секунд
И Gravity писал про компилятор gcc, а не про Visual Studio. Надо было еще версию gcc указать - это существенно.
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
28.07.2009, 22:01     Поразрядные операторы #9
odip, вот что писал Gravity
Цитата Сообщение от Gravity Посмотреть сообщение
такие фишки современные компиляторы умеют сами оптимизировать. Если посмотреть ассемблерный листинг первого и второго варианта, то код там абсолютно идентичен (проверял на GCC).
Я привел пример, что не все современные компиляторы это делают. Я не спорю про непосредственную проверку компилятором последнего бита, но а как же быть с переходом, инкрементом и декрементом eax? Зачем оно надо, если можно явно указать, что требуется от компилятора
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2009, 22:06     Поразрядные операторы
Еще ссылки по теме:

Поразрядные операции - C++
Помогите пожалуйста доделать программу, :даны два int числа: N1 = ABCD и N2 = EFGH, где AB…GH – 16 – ричные цифры. Образовать long число...

Поразрядные операции - C++
Написать функцию, которая в числе x устанавливает 0 в n бит, находящихся справа от позиции p, остальные биты остаются без изменения.

поразрядные операции - C++
помогите пожалуйста решить следущую задачу: даны два int-числа: N1 = АBCD и N2 = EFGH, где AB…GH – 16-ричные цифры, ПОп –...

Поразрядные операции - C++
Есть 16-е число, например N=0xC5D612F7, помогите убрать единицу в старшем бите у C и F, используя поразрядные операции на языке Си. Я даже...


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

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 22:06     Поразрядные операторы #10
2M128K145: Честно говоря я не очень понял, что пытается в этом коде сотворить VC - какую-то ерунду
Yandex
Объявления
28.07.2009, 22:06     Поразрядные операторы
Ответ Создать тему
Опции темы

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