Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65431
ТЕХНОЛОГИИ ДОСТ... 62376
Имитационное мо... 58017
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

Пользователей: 13,089
новичок: duskob67
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Расчет обратной матрицы на Delphi + Пояснительная записка
Лабораторная работа по динамическим спискам на Turbo Pascal (удаление ду...
Диплом - база данных поставщиков на Delphi (MS Sql Server)+ Пояснительна...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Манипулирование битами в пограммировании
Зачем вообще нужно манипулировать битами? Ведь многие из нас предпочли бы этого не делать. “Возня с битами” относится к низкому уровню и открывает возможности для ошибок, поэтому, если у нас есть альтернатива, следует использовать ее. Однако биты настолько важны и полезны, что многие программисты не могут их игнорировать. Это может звучать довольно грозным и обескураживающим предупреждением, но оно хорошо продумано.

Также вам может показаться, что такая тема как http://kabelremont1.narod.ru/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт kabelremont1.narod.ru
Тема паяльное оборудование ремонт кабельной линии там представлена весьма широко.


Некоторые люди действительно любят возиться с битами и байтами, поэтому следует помнить, что работа с битами иногда необходима (и даже может принести удовольствие), но ею не следует злоупотреблять. Процитируем Джона Бентли: “Люди, развлекающиеся с битами, будут биты” (“People who play with bits will be bitten”).
Иногда они являются естественными объектами нашей предметной области, поэтому естественными операциями в таких приложениях являются операции над битами. Примерами таких приложений являются индикаторы аппаратного обеспечения (“влаги”), низкоуровневые коммуникации (в которых мы должны извлекать значения разных типов из потока байтов), графика (в которой мы должны составлять рисунки из нескольких уровней образов) и кодирование (подробнее о нем — в следующем посте).
Для примера рассмотрим, как извлечь (низкоуровневую) информацию из целого числа (возможно, из-за того, что мы хотим передать его как набор байтов через двоичный механизм ввода-вывода).
void f(short val) // пусть число состоит из 16 битов, т.е. 2 байтов {
unsigned char left = val>>8; // крайний левый
// (самый старший) байт unsigned char right = val&0xff; // крайний правый
// (самый младший) байт
// . . .
bool negative = val&0x8000; // знаковый бит
// . . .
}
Такие операции не редкость. Они известны как “сдвиг и наложение маски” (“shift and mask”). Мы выполняем сдвиг (“shift”), используя операторы << или >>, чтобы переместить требуемые биты вправо (в младшую часть слова), где ними легко манипулировать. Мы накладываем маску (“mask”), используя оператор “и” (&) вместе с битовой комбинацией (в данном случае 0xff), чтобы исключить (установить равными нулю) биты, нежелательные в результате.
При необходимости именовать биты часто используются перечисления. Рассмотрим пример.
enum Printer_flags { acknowledge=1, paper_empty=1<<1, busy=1<<2, out_of_black=1<<3, out_of_color=1<<4,
// . . .
};
Этот код определяет перечисление, в котором каждый элемент равен именно тому значению, которому соответствует его имя.
out of color 16 0х10 0001 0000
out of black 8 0х8 0000 1000
busy 4 0х4 0000 0100
paper empty 2 0х2 0000 0010
acknowledge 1 0х1 0000 0001
Такие значения полезны, потому что они комбинируются совершенно независимо друг от друга.
unsigned char х = out_of_color | out_of_black; // x = 24 (16+8) х |= paper_empty; // x = 2 6 (24+2)
Отметим, что оператор |= можно прочитать как “установить бит” (или “установить некоторый бит”). Значит, оператор & можно прочитать как “установлен ли бит?” Рассмотрим пример.
if (х& out_of_color) { // установлен ли out_of_color? (Да, если
// установлен)
// . . .
}
Оператор & по-прежнему можно использовать для наложения маски. unsigned char y = х &(out_of_color | out_of_black); // y = 24
Теперь переменная y содержит копию битов из позиций 4 и 4 числа х (out_of_color и out_of_black).
Очень часть переменные типа enum используются как набор битов. При этом необходимо выполнить обратное преобразование, чтобы результат имел вид перечисления. Рассмотрим пример.
// необходимо приведение
Flags z = Printer_flags(out_of_color | out_of_black);

Приведение необходимо потому, что компилятор не может знать, что результат выражения out_of_color | out_of_black является корректным значением переменной типа Flags. Скептицизм компилятора обоснован: помимо всего прочего, ни один из элементов перечисления не имеет значения, равного 24 (out_of_ color | out_of_black), но в данном случае мы знаем, что выполненное присваивание имеет смысл (а компилятор — нет).
Опубликовал katy April 26 2015 14:42:00 · 0 Комментариев · 1730 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Globus VCL Extent...
Профессиональное ...
Microsoft Press -...
PHP 5. Полное рук...
Философия C++. Пр...
Самоучитель PHP 5...
Краснов М. - Open...
Учебник для продв...
Calendar
Email
Меню проводника в...
Ранги для форума
Borland C++Builde...
DateEdit
ATComponents
Программа "AutoRu...
DemoEdit [Исходни...
JanButtonsV
Delphi 6 программ...
Разработка Web-пр...

Топ загрузок
Приложение Клие... 100472
Delphi 7 Enterp... 87493
Converter AMR<-... 20081
GPSS World Stud... 13096
Borland C++Buil... 11941
Borland Delphi ... 8633
Turbo Pascal fo... 7042
Visual Studio 2... 5001
Калькулятор [Ис... 4860
FreeSMS v1.3.1 3544
Случайные статьи
Порождение таблиц
Уборка в Сочи
Бинарный поиск и п...
Integer or real va...
X\=Y
Таблицы (Table)
Первое знакомство
Окна программы Pro...
Сетевые серверы вы...
Технология СС/РР
MediaDesc
Определение кодово...
Пример простого пу...
ShiftRow
вание цифровой под...
Интерес представля...
Установка WordPres...
Способы обнаружени...
Синергетика
Программа преобраз...
Too many EXTRN def...
1.3.2. Создание об...
Разделение списка
Оперативный анализ...
Задание нетипизиро...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?