Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 16
На сайте нет зарегистрированных пользователей

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

Информационная система - продуктовый магазин на Turbo Pascal (База данны...
Моделирование информационно-поисковой библиографической системы на gpss ...
Сравнение двух бинарных деревьев на Turbo Pascal + отчет

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

Также вам может показаться, что такая тема как 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 11:42:00 · 0 Комментариев · 3287 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Последние загруж...
Экспорт базы данн...
Borland Delphi 6....
С# для профессион...
CABfiles
Система баннеро-о...
JanButtonsV
С/C++ Программиро...
AdBlaster v2.5 - ...
Atb
Ведение справочны...
PHP: настольная к...
Calendar
XPcontrol
Применение жадног...
Создание оригинал...
БД сеть компьютер...
Иллюстрированный ...
AID антивирус
PCXReader. Програ...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20260
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Изменение изображе...
Анализ слов
Доставка и обработ...
Моделирование очер...
Как писать правиль...
Другие функции биб...
Виртуальные сети
Служба имен доменов
Снизить шанс досту...
СПЕЦИАЛЬНЫЕ ТИПЫ Б...
Процедура просмотр...
5.1. Задачи
Административное о...
Размеры классов с ...
Если протокол не в...
Оператор поиска в ...
Свойство TableMapp...
вопросами организа...
Для программы алге...
Зачем необходимо д...
Как сервер отслежи...
Процедура SetBkCol...
Игра "Суммируйте д...
14.2. Две важные ф...
11.3. Улучшенные б...
Статистика



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


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