![]() |
Модераторы: 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...??? |
|||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
мне свой порт и я расскажу какой ты бит
Гы-гы. Сильно cказано ![]() Можно любое число брать, я про 0xDF, чтобы только получался необходимый результат, т.е. в данном случае: на пятой позиции в 2-ой системе стоял 0-ой бит. Ясно. Это сообщение отредактировал(а) student0511 - 3.10.2006, 19:25 |
|||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
А если у меня положение, на которое нужно поставить 1, меняется и зависит от чего-либо. Ну, на пример, у меня есть слово. Как мне поставить единицы на те номера, которые соответствуют номеру буквы в алфавите?
![]() Вроде допёр: просто взять переменную long из одной 1 единичке и нулей. Потом сдвигать 1 на то место, которое соответствует номеру буквы и применять операцию "ИЛИ". А изначатльные переменные взять за нули. Можно же так? Это сообщение отредактировал(а) student0511 - 3.10.2006, 20:23 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
student0511
Если брать глобально маски в UNIX очень часто используются (и в API, и в ядре), потому как они позволяют (точнее не они, а с помощью их) очень эффективно передавать флаги для указания включения чего-нибудь куда-нибудь. Сам подумай, unsigned long для большинства 32-х разрядных платформ способен хранить 64 разных флага! А с помощью масок можно легко проверять установку определенного бита, а вместе с тем флага -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
Т.е. 64 - это 8 байт чтоль? Значит весь алфавит можно забить, даже останется
![]() Это сообщение отредактировал(а) student0511 - 3.10.2006, 22:21 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Все-таки 32. ULONG на 32-разрядной платформе обычно 4 байта. -------------------- ... |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
ну да, спасибо за поправку -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
student0511 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
Всё. Разобрался. Даже что-то написал
![]() ![]() А вообще задача стояла следующим образом: продемонстрировать, используя "машинное слово", работу со множествами. Кому интересно: Это сообщение отредактировал(а) student0511 - 8.10.2006, 01:08 Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |