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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
#1

Объясните как работают битовые операции C++ - C++

19.12.2012, 18:17. Просмотров 1122. Ответов 17
Метки нет (Все метки)

В книге Айвора Хортона Visual C++ 2005 Базовый курс (ксати очень хорошая книга) была описана такая последовательность побитовой операции ИЛИ(|). Сказано, что она может установить необходимый бит в 1. Это мне понятно, но в одном месте он привел такой пример, который мне не понятен, объясните пожалуйста как работает данная последовательность операторов:
C++
1
2
3
4
int a //хранится какое-либо значение, в котором младшие 2 бита устанавливаем в 1
int b=2; // в двоичном представлении 0000 0010
int c=1; // в двоичном представлении 0000 0001
a |= b>c; //Как отработает в данном случае эта последовательность операторов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
19.12.2012, 18:20     Объясните как работают битовые операции C++ #2
не знаю. а неинициализирован. Все биты, включая младший, могут быть чем угодно.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 18:22     Объясните как работают битовые операции C++ #3
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
C++
1
a |= b>c;
точно так написано?
может так:
C++
1
a |= b|c;
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.12.2012, 18:22     Объясните как работают битовые операции C++ #4
Если b>c то
C++
1
a = a | 1
Иначе
C++
1
a = a | 0
Только a надо чем-то инициализировать сначала.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
19.12.2012, 18:35  [ТС]     Объясните как работают битовые операции C++ #5
Цитата Сообщение от Schizorb Посмотреть сообщение
Если b>c то
C++
1
a = a | 1
Иначе
C++
1
a = a | 0
Только a надо чем-то инициализировать сначала.
В том то и прикол, что это не условие, т.к. сказано, что оба бита устанавливаются в значение 1, а по вашему только один бит устанавливается либо нулевой, либо первый
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 18:38     Объясните как работают битовые операции C++ #6
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
что это не условие, т.к. сказано, что оба бита устанавливаются в значение 1, а по вашему только один бит устанавливается либо нулевой, либо первый
Проверьте сами, сколько бит в данном случае устанавливается
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.12.2012, 18:39     Объясните как работают битовые операции C++ #7
Я не знаю, что там сказано. Но b>c возвращает значение bool, которое в данной операции будет приводится к int - либо 1 либо 0.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
19.12.2012, 18:40  [ТС]     Объясните как работают битовые операции C++ #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
не знаю. а неинициализирован. Все биты, включая младший, могут быть чем угодно.
В а хранится что угодно! А два младших бита если они равны 0, то будут установлены в 1, а если равны 1, то ей и останутся, а остальные биты не важны! Так вот почему используется оператор < если условия тут вообще нет! Может опечатка в книге?
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
19.12.2012, 18:43     Объясните как работают битовые операции C++ #9
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
В а хранится что угодно! А два младших бита если они равны 0, то будут установлены в 1, а если равны 1, то ей и останутся, а остальные биты не важны! Так вот почему используется оператор < если условия тут вообще нет! Может опечатка в книге?
если условие ложно, то и младший бит будет чем угодно.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
19.12.2012, 18:44  [ТС]     Объясните как работают битовые операции C++ #10
Цитата Сообщение от Schizorb Посмотреть сообщение
Я не знаю, что там сказано. Но b>c возвращает значение bool, которое в данной операции будет приводится к in - либо 1 либо 0.

Вы поняли суть побитовой операции ИЛИ?

Побитовое ИЛИ — это бинарная операция, действие которой эквивалентно применению логического ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. (википедия)
Побитовые операции я понял, но только не понял, почему так реализовано! и если используется условие (b>c) тогда только нулевой получается бит будет установлен в 1 (При данных b=2, c=1)
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.12.2012, 18:46     Объясните как работают битовые операции C++ #11
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
Может опечатка в книге?
Видимо, да. Правильный вариант по установке двух последних битов предложил Croessmah.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
19.12.2012, 18:50  [ТС]     Объясните как работают битовые операции C++ #12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
если условие ложно, то и младший бит будет чем угодно.
Да! но в книге написано, что два младших бита устанавливаются в значение 1! Наверно все-таки опечатка! Я в этой книге интересную еще опечатку нашел
Приведение типов вместо static_cast<>()
написано в одной главе около 5 раз static_cats<>() - откуда только коты взялись
однако в следующей главе написано без ошибок

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
точно так написано?
может так:
C++
1
a |= b|c;
С вами согласен! Ваш приведенный код правильно вроде написан! Я просто думал, что может я чего не до понимаю!
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.12.2012, 19:01     Объясните как работают битовые операции C++ #13
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
int a //хранится какое-либо значение, в котором младшие 2 бита устанавливаем в 1
int b=2; // в двоичном представлении 0000 0010
int c=1; // в двоичном представлении 0000 0001
a |= b>c; //Как отработает в данном случае эта последовательность операторов?
Фигня какая то, левый операнд интовый, а правый булевый. Надо так:
C++
1
2
3
4
int a //хранится какое-либо значение, в котором младшие 2 бита устанавливаем в 1
int b=2; // в двоичном представлении 0000 0010
int c=1; // в двоичном представлении 0000 0001
a |= b|c;
. В последней строке сначала вычисляется правый операнд |=, это b|c, в b установлен предпоследний бит, в c последний, значит в результате установятся оба, остальные биты сброшены в обоих операндах, значит сбросятся и в результате, а потом выполнится a|правый опернд оператора |=, результат попадёт в a. Не важно, чему равны остальные биты, где ноли, там ноли в обоих операндах и получаются ноли, где единицы, там в a единицы и в результате будут единицы. Не важно, что в этих позициях во втором операнде, получатся единицы, так как по одной единице в этих позициях уже есть. Так же не важно, чему равны младшие 2 бита a, по одной единице в них уже есть в правом операнде и получатся единицы. Но если поставить и другие единицы в правом операнде, то если в a там ноли, то тогда важно, что в правом операнде, а там мы договорились поставить единицы, ну так они и будут. То есть ноли в этих разрядах поменяются, а менять их не надо при любых исходных значениях.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
19.12.2012, 19:07     Объясните как работают битовые операции C++ #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Фигня какая то, левый операнд интовый, а правый булевый. Надо так:
да кто тебе сказал, что "фигня"? В языке Си нет понятия "булевый".

Добавлено через 58 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
int a //хранится какое-либо значение, в котором младшие 2 бита устанавливаем в 1
int b=2; // в двоичном представлении 0000 0010
int c=1; // в двоичном представлении 0000 0001
a |= b|c;
Лучше так
C++
1
2
3
4
int a=0; 
int b=2; // в двоичном представлении 0000 0010
int c=1; // в двоичном представлении 0000 0001
a |= b>c;
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 19:09     Объясните как работают битовые операции C++ #15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Лучше так
так устанавливается только последний бит (хотя кто его знает, что вернет b>c)
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
19.12.2012, 19:17     Объясните как работают битовые операции C++ #16
Цитата Сообщение от Croessmah Посмотреть сообщение
так устанавливается только последний бит
дык, а ты думал автору все биты нужны?
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
19.12.2012, 19:21  [ТС]     Объясните как работают битовые операции C++ #17
Цитата Сообщение от Croessmah Посмотреть сообщение
так устанавливается только последний бит (хотя кто его знает, что вернет b>c)
b и c инициализированы, и b>c вернет true!
Только он написал, что оба бита установятся в единицу, а получается только последний
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2012, 19:26     Объясните как работают битовые операции C++
Еще ссылки по теме:
Битовые операции C++
C++ Битовые операции
Битовые операции C++
C++ Битовые операции
C++ Битовые операции

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 19:26     Объясните как работают битовые операции C++ #18
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
дык, а ты думал автору все биты нужны?
int a;//хранится какое-либо значение, в котором младшие 2 бита устанавливаем в 1
А разве один?
Yandex
Объявления
19.12.2012, 19:26     Объясните как работают битовые операции C++
Ответ Создать тему
Опции темы

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