Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Побитовые логические операции, операции над битами
В языке Си предусмотрен набор операций для работы с отдельными битами. Эти операции нельзя применять к переменным вещественного типа. Обозначения операций над битами: ~ – дополнение (унарная операция); инвертирование (одноместная операция); & – побитовое «И» – конъюнкция; | – побитовое включающее «ИЛИ» – дизъюнкция; ^ – побитовое исключающее «ИЛИ» – сложение по модулю 2; >> – сдвиг вправо; << – сдвиг влево. Общий вид операции инвертирования (поразрядное отрицание): ~ выражение инвертирует каждый разряд в двоичном представлении своего операнда. Остальные операции над битами имеют вид: Выражение_1 знак операции Выражение_2 Операндами операций над битами могут быть только выражения, приводимые к целому типу. Операции (~, &, |, ^) выполняются поразрядно над всеми битами операндов (знаковый разряд особо не выделяется): ~0xF0 « x0F 0xFF & 0x0F « x0F 0xF0 | 0x11 « xF1 0xF4 ^ 0xF5 « x01 Операция & часто используется для маскирования некоторого множества бит. Например, оператор w = n & 0177 передает в w семь младших бит n, полагая остальные равными нулю. Операции сдвига выполняются также для всех разрядов с потерей выходящих за границы бит. Операция (|) используется для включения бит w = x | y, устанавливает в единицу те биты в x, которые равны 1 в y. Необходимо отличать побитовые операции & и | от логических операций && и || , если x = 1, y = 2, то x & y равно нулю, а x && y равно 1. 0x81 << 1 « 0x02 0x81 >> 1 « 0x40 Если выражение_1 имеет тип unsigned, то при сдвиге вправо освобождающиеся разряды гарантированно заполняются нулями (логический сдвиг). Выражения типа signed могут, но необязательно, сдвигаться вправо с копированием знакового разряда (арифметический сдвиг). При сдвиге влево освобождающиеся разряды всегда заполняются нулями. Если выражение_2 отрицательно либо больше длины выражения_1 в битах, то результат операции сдвига не определен. Унарная операция (~) дает дополнение к целому, т.е. каждый бит со значением 1 получает значение 0 и наоборот. Операции сдвига << и >> применяются к целочисленным операндам и осуществляют соответственно сдвиг вправо (влево) своего левого операнда на число позиций, задаваемых правым операндом, например, x << 2 сдвигает x влево на две позиции, заполняя освобождающиеся биты нулями (эквивалентно умножению на 4). Операции сдвига вправо на k разрядов весьма эффективны для деления, а сдвиг влево – для умножения целых чисел на 2 в степени k: x << 1 « x*2; x >> 1 « x/2 ; x << 3 « x*8 . Подобное применение операций сдвига безопасно для беззнаковых и положительных значений выражения_1. Операции сдвига не учитывают переполнение и потерю значимости. В математическом смысле операнды логических операций над битами можно рассматривать как отображение некоторых множеств с размерностью не более разрядности операнда на значения {0,1}. Пусть единица означает обладание элемента множества некоторым свойством, тогда очевидна теоретико-множественная интерпретация рассматриваемых операций: ~ – дополнение; | – объединение; & – пересечение. Простейшее применение – проверка нечетности целого числа: int i; ... if ( i & 1) printf (" Значение i четно!"); Комбинирование операций над битами с арифметическими операциями часто позволяет упростить выражения.
Операция «,» (запятая) Данная операция используется при организации строго гарантированной последовательности вычисления выражений (обычно используется там, где по синтаксису допустима только одна операция, а необходимо разместить две и более, например, в операторе for). Форма записи: выражение_1, …, выражение_N; выражения 1, 2,…, N вычисляются последовательно друг за другом и результатом операции становится значение последнего выражения N, например: m = ( i = 1, j = i ++, k = 6, n = i + j + k ); получим последовательность вычислений: i =1, j = i =1, i = 2, k = 6, n = 2+1+6,и в результате m = n = 9. В заключение отметим следующую особенность языка Си – любые операции допускаются только со скалярными объектами, причем небольшого размера, порядка размера регистров процессора. Это объясняется ориентацией языка на задачи системного программирования. Любые действия с составными или сложными объектами – массивами, строками, структурами и т.п. реализуются с помощью стандартных библиотечных функций, работа с которыми будет рассмотрена позже. ГЛАВА 5. Обзор базовых инструкций языка Си
Стандартная библиотека языка Си В любой программе кроме операторов и операций используются средства библиотек, входящих в среду программирования. Часть библиотек стандартизована и поставляется с компилятором. Функции, входящие в библиотеку языка Си, намного облегчают создание программ. Расширение библиотечных файлов *.lib. В стандартную библиотеку входят также прототипы функций, макросы, глобальные константы. Это, как вы уже знаете, заголовочные файлы с расширением *.h, которые хранятся в папке include и подключаются на этапе предпроцессорной обработки исходного текста программ. Рассмотрим наиболее часто используемые функции из стандартной библиотеки языка Си.
Стандартные математические функции Математические функции языка Си декларированы в файлах math.h и stdlib.h. В приведенных здесь функциях аргументы и возвращаемый результат имеют тип double. Аргументы тригонометрических функций должны быть заданы в радианах (2π радиан = 360o).
|
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 379. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |