7 (Семинары)
Описание файла
Файл "7" внутри архива находится в папке "Семинары". PDF-файл из архива "Семинары", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Семинар 7 (1 курс, С)Битовые операторы0 0 0 0 1 0 002720unsigned char c;c = 8;Побитовый сдвигc = c << 3; или c <<= 3; // смещение битов влево на три разряда(эквивалентно умножению на 23 = 8).с = с >> 3; или c >>= 3; // смещение битов вправо на три разрядаПоразрядные операторы“И” - &a = 3;&b = 6;c = a&b;(c = 2)000000110000011000000010Пример.
«Выставлен» ли в c n-ый бит?unsigned flag = 1;if (c & (flag << n)) оператор; //выставлен!;“ИЛИ” - ||c = a | b; (c = 7)000000110000011000000111Пример. «Выставить» в c n-ый бит, не затрагивая остальные битыunsigned flag = 1;c = с |(flag << n)“исключающее ИЛИ” - ^c = a ^ b; (c = 5)“отрицание” - ~~00110011 -> 11001100^000000110000011000000101Семинар 7 (1 курс, С)Пример. Вывод на экран значения переменной типа unsigned char в двоичном виде.2int i;unsigned un = 128;for (i = 7; i >= 0; i--){if ( un & (1<<i)) printf("1");else printf("0");}Оператор typedeftypedef struct str_{float x; int i;} STR;STR str1; // вместо struct str_ str1;Можно и так:typedef int disco;disco m = 1; // но не нужно!Перечисленияenum COLORS {BLACK, BLUE, RED}; // =0, =1, =2int a = BLUE;Примеры указателейintintintint*ip; // указатель на тип int*ip[5]; // массив указателей на тип int из 5 элементов(*ip)[5]; // указатель на объект из 5 элементов типа int(*ip)(); // указатель на функцию, возвращающую тип intПример: передача в функцию указателя на другую функциюvoid f(double (*dp)(double)){printf("\n %f", dp(0.));}// вычисляет и выводит на экран значение// переданной функции от 0.void main(){double (*dp)(double);dp = sin;// получаем адрес библиотечной функции синуса.f(dp);// 0.dp = cos;f(dp);// 1.}Семинар 7 (1 курс, С)Директивы препроцессора#include <stdio.h>#define M 100#define c параметрами#define SQ(x) x*xa = SQ(4); // (a= 16)a = SQ(2+2); // 2+2*2+2 = 8 !Лучше:#define SQ(x) ((x)*(x))Условная компиляция#define MAIN1 1#if MAIN1 == 1или #ifdef MAIN1void main(){операторы1;}#elsevoid main(){операторы2;}#endif(Следует внимательно следить за соответствием if и endif)Аналогично можно исключать из компиляции фрагменты функции.Б.
Керниган, Д. Ритчи. Язык программирования Си. §§ 2.9, 4.11, 5.11, 6.8, 6.93.