![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ezdef!ghter |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.3.2005 Репутация: нет Всего: нет |
Че за побитовые операторы &, |, ^, >>, <<, ~. Зачем они нужны и как ими пользоваться?
|
|||
|
||||
BreakPointMAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
NwinIX |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.8.2005 Репутация: нет Всего: нет |
Тут глянь
http://www.sanych99.narod.ru/New_Site/books/kr/032.html Пример из книги Кернигана и Ритчи, довольно неплох, да и сам по этой книге С изучал. Это сообщение отредактировал(а) NwinIX - 21.8.2005, 18:46 |
|||
|
||||
__Sergey__ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 21.1.2005 Репутация: нет Всего: 4 |
вместе с Г. Шилдтом, Х.М. Дейлом и многими другими ![]() |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
& - операция И. Если в левом операнде И в правом были установлены биты на позиции 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 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Стоит добавить, что имеют несравненно высокий (самый высокий приоритет среди операторов). Наравне с operator (*), operator ->, operator . ...
|
|||
|
||||
ezdef!ghter |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.3.2005 Репутация: нет Всего: нет |
А какой от них(побитовых операторов) прок? Че с помощью них полезного зделать можна?
|
|||
|
||||
Mayk |
|
||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
1) Быстрое умножение и деление на 2(умножение и особенно деление вообще долгие операции). 2) Флаги объекта. Рассмотрим объект "кот". В каких неисключающих состояниях может быть кот? Кот может быть - хорошим, а может и не быть Кот может быть - сытым, а может и не быть. Кот может быть - счастливым, а может и не быть. Кот может держать рот сжатым, а может не держать. Кот может быть - в сапогах, а может и не быть. Кот можтет быть - со шпагой в лапе, а может и не быть. В конце концов кот может быть - Доместиком, а может и не быть ![]() Определяем флаги:
Теперь если мы можем манипулировать состоянием кота очень быстро. Вот так мы сделаем любого кота счастливым и сытым
Всё же это гораздо короче, чем
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |