Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> побитовые операторы 
:(
    Опции темы
ezdef!ghter
Дата 21.8.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.3.2005

Репутация: нет
Всего: нет



Че за побитовые операторы &, |, ^, >>, <<, ~. Зачем они нужны и как ими пользоваться?
PM MAIL   Вверх
BreakPointMAN
Дата 21.8.2005, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



...и да помогут тебе Google и Яndex ...


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
NwinIX
  Дата 21.8.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



Тут глянь
http://www.sanych99.narod.ru/New_Site/books/kr/032.html
Пример из книги Кернигана и Ритчи, довольно неплох, да и сам по этой книге С изучал.

Это сообщение отредактировал(а) NwinIX - 21.8.2005, 18:46
PM MAIL   Вверх
__Sergey__
Дата 21.8.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 21.1.2005

Репутация: нет
Всего: 4



Цитата(BreakPointMAN @ 21.8.2005, 18:10)
...и да помогут тебе Google и Яndex ...

вместе с Г. Шилдтом, Х.М. Дейлом и многими другими smile

PM MAIL   Вверх
Mayk
Дата 21.8.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(ezdef @ 21.8.2005, 21:28)
&, |, ^, >>, <<, ~.


& - операция И. Если в левом операнде И в правом были установлены биты на позиции n, то в результатируещем значении данный бит будет равен 1. Иначе 0.
Пример: 11110000 & 10101010 (0xf0 & 0xaa) = 10100000(0xa0)

| - операция ИЛИ. Результатирующий бит будет равен 1, если хотя бы один из исходных битов был равен единицы.
Пример: 11110000 | 10101010 (0xf0 | 0xaa) = 11111010(0xfa)

^ - операция исключающего или. Результатирующий бит будет равен 1 только в том случае, когда лишь 1 из исходных битов равен 1.
Пример: 11110000 ^ 10101010 (0xf0 ^ 0xaa) = 01011010(0x5a).

>> - поразрдяный сдвиг вправо на указанное кол-во бит c сохранением знакового бита. Все биты, кроме знакового, сдвигаются вправо(в сторону меньших битов), на освободившееся место встает знаковый бит. Операция аналогична делению на два в степени n, n - правый операнд(кол-во сдвигаемых битов).

Пример: 11110000(0xf0,-16) >> 00000001 (0x01, 1) = 11111000 (0xf8, -8)
Пример: 11110000(0xf0,-16) >> 10101010 (0xaa) = 11111111(0xff, -1).

<< - поразрядый сдвиг влево. Все биты смещаются влево на указанное кол-во бит.Младший бит сбрасывается в ноль. Операция аналогична умножению на два в степени n, n - правый операнд(кол-во сдвигаемых битов).
Пример: 01111111(0x7f, 127) << 00000001 (0x01, 1) = 11111110(0x80, -2)
Пример: 00000001(0x01, 1) << 00000003 (0x01, 1) = 00001000(0x08, 8)

~ - отрицание. Результатирующий бит будет равен 1, если исходный был равен 0. И 0 в ином случау.
Пример: ~10110111(0xb7) = 01001000(0x48).

Это сообщение отредактировал(а) Mayk - 21.8.2005, 19:09


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
comcon1
Дата 22.8.2005, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Стоит добавить, что имеют несравненно высокий (самый высокий приоритет среди операторов). Наравне с operator (*), operator ->, operator . ...


--------------------
PM MAIL   Вверх
ezdef!ghter
Дата 22.8.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.3.2005

Репутация: нет
Всего: нет



А какой от них(побитовых операторов) прок? Че с помощью них полезного зделать можна?
PM MAIL   Вверх
Mayk
Дата 22.8.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(ezdef @ 22.8.2005, 20:11)
Че с помощью них полезного зделать можна?

1) Быстрое умножение и деление на 2(умножение и особенно деление вообще долгие операции).
2) Флаги объекта. Рассмотрим объект "кот". В каких неисключающих состояниях может быть кот?
Кот может быть - хорошим, а может и не быть
Кот может быть - сытым, а может и не быть.
Кот может быть - счастливым, а может и не быть.
Кот может держать рот сжатым, а может не держать.
Кот может быть - в сапогах, а может и не быть.
Кот можтет быть - со шпагой в лапе, а может и не быть.
В конце концов кот может быть - Доместиком, а может и не быть smile


Определяем флаги:
Код

typedef int CatFlags;
enum {
   CatGood = (1<<1),      //0 бит
   CatSatisfied = (1<<2), //1 бит
   CatHappy = (1 << 3), //2 бит
   CatQuiet = (1<<4), //3 бит
   CatInBoot = (1<<5), //4 бит
   CatWithSword = (1<<6), //5 бит
   СatDomestic = (1 << 7) //6 бит
};


Теперь если мы можем манипулировать состоянием кота очень быстро.
Вот так мы сделаем любого кота счастливым и сытым
Код

catFlags |= CatSatisfied | CatHappy;

Всё же это гораздо короче, чем
Код

catFlags.satisfied = catFlags.happy = true;



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.