русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Побитовые логические операции


Дата добавления: 2015-01-16; просмотров: 512; Нарушение авторских прав


В языке предусмотрен ряд операций для работы с битами;эти операции нельзя применять к переменным типа FLOAT илиDOUBLE. & Побитовое AND \! Побитовое включающее OR ^ побитовое исключающее OR << сдвиг влево >> сдвиг вправо \^ дополнение (унарная операция) "\" иммитирует вертикальную черту. Побитовая операция AND часто используется для маскированиянекоторого множества битов; например, оператор C = N & 0177передает в 'с' семь младших битов N , полагая остальные рав-ными нулю. Операция 'э' побитового OR используется для вклю-чения битов: C = X э MASK устанавливает на единицу те биты в х , которые равны единицев MASK. Следует быть внимательным и отличать побитовые операции& и 'э' от логических связок && и \!\! , Которые подразуме-вают вычисление значения истинности слева направо. Например,если х=1, а Y=2, то значение х&Y равно нулю , в то время какзначение X&&Y равно единице./почему?/ Операции сдвига << и >> осуществляют соответственносдвиг влево и вправо своего левого операнда на число битовыхпозиций, задаваемых правым операндом. Таким образом , х<<2сдвигает х влево на две позиции, заполняя освобождающиесябиты нулями, что эквивалентно умножению на 4. Сдвиг вправовеличины без знака заполняет освобождающиеся биты на некото-рых машинах, таких как PDP-11, заполняются содержанием зна-кового бита /"арифметический сдвиг"/, а на других - нулем/"логический сдвиг"/. Унарная операция \^ дает дополнение к целому; это озна-чает , что каждый бит со значением 1 получает значение 0 инаоборот. Эта операция обычно оказывается полезной в выраже-ниях типа X & \^077 где последние шесть битов х маскируются нулем. Подчеркнем,что выражение X&\^077 не зависит от длины слова и поэтомупредпочтительнее, чем, например, X&0177700, где предполага-ется, что х занимает 16 битов. Такая переносимая форма нетребует никаких дополнительных затрат, поскольку \^077 явля-ется константным выражением и, следовательно, обрабатываетсяво время компиляции. Чтобы проиллюстрировать использование некоторых операцийс битами, рассмотрим функцию GETBITS(X,P,N), которая возвра-щает /сдвинутыми к правому краю/ начинающиеся с позиции рполе переменной х длиной N битов. мы предполагаем , чтокрайний правый бит имеет номер 0, и что N и р - разумно за-данные положительные числа. например, GETBITS(х,4,3) возвра-щает сдвинутыми к правому краю биты, занимающие позиции 4,3и 2. GETBITS(X,P,N) /* GET N BITS FROM POSITION P */ UNSIGNED X, P, N; { RETURN((X >> (P+1-N)) & \^(\^0 << N)); } Операция X >> (P+1-N) сдвигает желаемое поле в правый конецслова. Описание аргумента X как UNSIGNED гарантирует, чтопри сдвиге вправо освобождающиеся биты будут заполняться ну-лями, а не содержимым знакового бита, независимо от того, накакой машине пропускается программа. Все биты константноговыражения \^0 равны 1; сдвиг его на N позиций влево с по-мощью операции \^0<<N создает маску с нулями в N крайнихправых битах и единицами в остальных; дополнение \^ создаетмаску с единицами в N крайних правых битах. Упражнение 2-5 --------------- Переделайте GETBITS таким образом, чтобы биты отсчитыва-лись слева направо. Упражнение 2-6 --------------- Напишите программу для функции WORDLENGTH(), вычисляющейдлину слова используемой машины, т.е. Число битов в перемен-ной типа INT. Функция должна быть переносимой, т.е. Одна ита же исходная программа должна правильно работать на любоймашине. Упражнение 2-7 --------------- Напишите программу для функции RIGHTROT(N,B), сдвигающейциклически целое N вправо на B битовых позиций. Упражнение 2-8 --------------- Напишите программу для функции INVERT(X,P,N), котораяинвертирует (т.е. Заменяет 1 на 0 и наоборот) N битов X, на-чинающихся с позиции P, оставляя другие биты неизмененными.


<== предыдущая лекция | следующая лекция ==>
Операции увеличения и уменьшения | Операции и выражения присваивания


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.053 сек.