|
||||||||||||||||||||
Лабораторная Работа № 6Тема: Выполнение поразрядных операций. Цель: 1. Закрепить теоретические знания (ЗТЗ) и приобрести практические навыки (ППН) в реализации Си-программ с использованием операторов ввода, вывода, управляющих символов. 2. ЗТЗ и ППН в составлении программ с использованием различных операций. 3. Закрепить знания и навыки работы в IDE BC++ на IBM PC. Теоретические сведения:
В языке С и С++ реализованы операции, которые выполняются над битами (двоичными разрядами), содержащими значения. Поразрядные операторы (перечислены в следующей таблице) можно использовать только с целыми типами.
Таблица истинности для операторов &, | и ^ имеет следующий вид.
При выполнении поразрядных операций И, ИЛИ исключающего ИЛИ эти правила применяются к каждому биту каждого оператора. Приведем пример выполнения каждой из этих поразрядных операций: 01001101 01001101 01001101 & 00111011 | 00111011 ^ 01110110 00001001 01111111 01110110
Оператор дополнения до еденицы (~) будет инвертировать все биты оператора. Например, если символьная переменная ch имеет двоичный код 00111001, то после выполнения оператора ch=~ch; двоичный код переменной ch будет иметь вид 11000110. Оператор сдвига вправо (> > ) и влево (< < ) сдвигают все биты целого значения на заданное число разрядов. При выполнении сдвига « выдвинутые» с одного конца операнда биты «теряются», а на другом конце освободившиеся позиции заполняются нулями. (Если же сдвигаемое значение отрицательное, то для сохранения знака «вдвигаются» не нули, а единицы. ) Число стоящих справа от оператора сдвига, указывает количество сдвигаемых позиций.
Общая форма записи операторов сдвига имеет следующий вид: значение> > количество значение< < количество Здесь количество означает количество позиций, на которое будет сдвинуто значение. Если двоичный код значения(пусть значение не имеет знака) равен 00111101, то после сдвига вправо получим 00011110, а после сдвига влево результатом будет 01111010. Ниже показан приоритет поразрядных операторов.
Пример: Программа реализующая побитовые операции. #includ< stdio. h> #includ< conio. h> void main(void) { cnt a, a1, a2, b, c, p1, p2, p3; clrscr(); printf(“Введите число в 16-ой системе счисления\n); scanf(“%x”, & a); printf(“Введите два действительных числа\n”); scanf(“%d%d”, & b, & c); a1=a> > 3; a2=a< < 5; p1=b& c; p2=b|c; p3=b^c; printf(“Сдвиг влево(< < 5)%x\n”, a2); printf(“Сдвиг вправо (> > 3)%x\n”, a1); printf(“Операция ‘& ’: %d \n”, p1); printf(“Операция ‘|’: %d\n”, p2); printf(“Операция ‘^’: %d\n”, p3); getch(); }
Протокол: Введите число в 16-ой системе счисления aadf Введите два действительных числа Сдвиг влево(< < 5)5be0 Сдвиг вправо (> > 3)f5sb Операция ‘& ’: 19 Операция ‘|’: 127
Задание:
Контрольные вопросы:
Содержание отчета:
|
||||||||||||||||||||
|