![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
student0511 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
ALL
Здрасти всем! ![]() Наткнулся на задачу с множествами, где необходимо использовать побитовые операциии. До этого с данной темой не сталкивался. Подскажите, pls, где можно найти исчерпывающую информацию, а то в google ничего путёвого не нашёл. Мне не понятны некоторые моменты; вот, на пример:
или
Что такое 0x00000080, 0xffff7fff, 0x0000ff00 ? Операции ">>" и "<<" и др. лог. операции мне чуток ясны, а вот какую роль играют, если я не ошибаюсь, маски(так их называют вроде) я нигде не нашёл. Как задаются или они явл. константными выражениями. Объясните, плз! ![]() |
||||
|
|||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Ну допустим есть число 10001001 01110100 (типа short)
Чтобы проверить установлен ли 3 бит (нумерация с нуля) используем логическое умножение на маску 00000000 00001000 или
Это совйство связано с таблицей истинности для лог. умножения, т. е 0 & 0 = 0 0 & 1 = 1 & 0 = 0 1 & 1 = 1 т. е 10001001 01110100 & 00000000 00001000 = 00000000 00000000 = 0 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Базовые понятия Си:
0x... - означает, что число в шестнадцатиричной системе. Например, 0x10 (это 16 в десятичной) 0... - означает, что число в восьмиричной системе. Например, 017 (это 15 в десятичной) Маской называют число, которое позволяет выделить некую часть из другого. Маски логично задавать в двоичной системе. Но Си это не позволяет, поэтому используют 16-ти ричную систему. Пример. Есть строка, состоящая из цифр 0, 1... 9. Хотелось бы превратить это в массив чисел от 0, до 9. В ASCII символы '0'...'9' задаются кодами 0x30...0x39. Поэтому, если применить маску 0x0F, то она уберет ненужную информацию и из 0x39 получится 0x09. Это выглядит так: 0x39 & 0x0F = 0x09. Здесь - & - подитовая операция AND. Есть еще | - OR, и ^ - XOR. >> и << - это операции побитового сдвига вправо и влево соответственно. Сдвиг влево на n разрядов эквивалентен умножению на 2 в степени n, а сдвиг вправо - делению. Данные операции применяются только к целым типам. Это сообщение отредактировал(а) bsa - 1.10.2006, 17:48 |
|||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
А маски составляются в процессе создания программы, или они являются постоянными и применяются в определённых ситуациях? И, если первое, то можно более подробнее объяснить о их свойствах (если так можно выразиться
![]() Это сообщение отредактировал(а) student0511 - 1.10.2006, 18:17 |
|||
|
||||
MAKCim |
|
||||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Например обнуление переменной
Инвертирование бит в числе
Установка n-го бита
Сбрасывание n-го бита
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||||
|
|||||||||||
likehood |
|
|||
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
||||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
А что же на счёт масок? В каких случаях их применять?
![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
когда надо ! зависит от задач -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
kondr |
|
||||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.11.2005 Репутация: нет Всего: 1 |
Вот классический пример. Содержимое переменных меняем местами без использования промежуточной переменной. |
||||
|
|||||
smalcom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 494 Регистрация: 16.10.2004 Где: Dnepr Репутация: нет Всего: 7 |
при морщинах
-------------------- What DA F...??? |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
можно ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
А не подскажите всё-таки ссылочку на данную тему. И про маски можно по-подробнее раскрыть тему
![]() |
|||
|
||||
smalcom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 494 Регистрация: 16.10.2004 Где: Dnepr Репутация: нет Всего: 7 |
маски это как язык програмирования - млм ты знаешь куда их приткнуть или оно тебе не надо. Придет время возникнет задача и ты поймешь зачем нужны маски. На пальцах тебе не объяснишь и понятно что гугл те ниче не выдал - маски это не раздел програмирования это инструмент это как знание языка и владение им этому нельзя научить. Засим откланиваюся
-------------------- What DA F...??? |
|||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
У меня сейчас возникла задача! И я хочу сам допереть до её решения, но т.к., ничего не ведая на данную тему, я не знаю с чего начать. Тем более по побитовым операциям мало инфы.
Это сообщение отредактировал(а) student0511 - 3.10.2006, 00:02 |
|||
|
||||
smalcom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 494 Регистрация: 16.10.2004 Где: Dnepr Репутация: нет Всего: 7 |
ну вот тебе примерчик
вот и все. теперь думай для чего ты его применишь. как грица покажи мне свой порт и я расскажу какой ты бит -------------------- What DA F...??? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |