
- •Оглавление
- •1.2. Свойства языков программирования
- •1.3. Основные парадигмы программирования Процедурное программирование
- •Модульное программирование
- •Абстракция данных
- •Объектно-ориентированное программирование
- •Непечатные символы
- •Тема 2 Типы данных
- •2.1. Понятие переменной и объявление переменных
- •Объявление переменных
- •Встроенные типы данных
- •Размер памяти, выделяемой под встроенные типы данных
- •2.2. Константы и перечисления Константные переменные
- •Перечисления
- •2.3. Операции и выражения
- •Мультипликативные операции
- •Операции сравнения
- •Побитовые логические операции
- •Побитовые операции
- •Комментарии
- •Оператор while(пока)
- •Оператор do/while(выполнять/пока)
- •Оператор for(цикл)
- •Оператор множественного выбора switch
- •Операторы breakиcontinue
- •Тема 4 Массивы
- •4.1.Определение, объявление и инициализация массивов
- •Объявления и инициализация массивов в программе
- •4.2. Сортировка массивов Пузырьковая сортировка
- •Сортировка вставками
- •4.3. Поиск в массивах Линейный поиск
- •Двоичный поиск
- •4.4. Многомерные массивы
- •Тема 5 Указатели Объявления и инициализация переменных указателей
- •5.1. Операции над указателями
- •5.2. Выражения и арифметические действия с указателями
- •5.3. Взаимосвязи между указателями и массивами
- •5.4. Массивы указателей
- •5.5. Динамическое выделение памяти под массивы
- •Тема 6 Функции
- •6.2. Определения функций
- •Генерация случайных чисел
- •6.3. Классы памяти и область действия Классы памяти
- •Область действия
- •6.4. Рекурсия
- •6.5. Ссылки и ссылочные параметры
- •Вызов функций по ссылке с аргументами указателями
- •6.6. Использование спецификатораconstс указателями
- •6.7. Перегрузка функций
- •Аргументы по умолчанию
- •6.8. Передача массивов в функции
- •6.9. Указатель на функцию
- •6.10. Командная строка аргументов
- •6.11 Неопределенное количество аргументов
- •Тема 7 Введение в обработку строк
- •7.1. Работа со строками в с
- •Понятие символов и строк в с
- •Функции для работы со строками
- •Определение длины строки
- •Сложение двух строк (конкатенация)
- •Добавление к исходной строке указанного количества символов.
- •Копирование строки в другую строку
- •Сравнение строк
- •Получение строки от пользователя
- •Тема 8 Работа с файлами
- •Открытие файла
- •Чтение из файла символа или строки символов
- •Запись символа или строки символов в файл
- •Смещение внутри файла
- •Значения параметра fromwhereфункцииfseek
- •Закрытие файла
- •Тема 9 Компоновка программ и препроцессор
- •9.1. Компоновка программ
- •Проблема использования общих функций и имен
- •Использование включаемых файлов
- •9.2. Препроцессор
- •Определение макросов
- •Условная компиляция
- •Дополнительные директивы препроцессора
- •Тема 10 Структуры
- •10.1. Определение структур и доступ к элементам
- •Доступ к элементам структур
- •Использование структур
- •10.2. Битовые поля
- •10.3. Объединения
- •10.4. Построение связных списков на основе структур с самоадресацией
- •Создание простого связного списка
- •Очереди
- •Деревья
- •Список рекомендуемой литературы
Побитовые операции
-
Операция
Результат
Объяснение операции
3 | 1
4 & 7
4 ^ 7
0 & 0xF
~0x00F0
8<<2
192>>4
3
4
3
0
0xFF0F
32
12
побитовое ИЛИ
побитовое И
побитовое исключающее ИЛИ
побитовое И
поразрядное дополнение (отрицание)
побитовый сдвиг влево
побитовый сдвиг вправо
Поразрядная операция ИЛИ, обозначаемая знаком|, выполняет операциюИЛИнад каждым индивидуальным битом двух своих операндов. В результате выполнения этой операции получается0, если в обоих разрядах записаны нули, и1во всех остальных случаях (логическое сложение). Например,10 | 7даст15, поскольку в двоичном виде10это1010,7– это111, соответственно операцияИЛИдает1111или15в десятичной системе (нули слева опущены).
Поразрядная операция И(&) выполняется над каждым битом своих операндов. В результате выполнения операции получается1, если в обоих разрядах стоит1, и0во всех остальных случаях (логическое умножение). В предыдущем примере10 & 7в результате даст2(10в двоичном виде).
Побитовое исключающее ИЛИ(^) в результате выпонения над каждым битом операндов даст1, если значения в разрядах разные, и0, если значения в разрядах совпадают (операцияXOR). Тот же пример10 ^ 7 даст 5(101в двоичном представлении).
Побитовое дополнение до единицы или побитовое отрицание – это унарная операция. В результате ее выполнения число в двоичном виде «инвертируется» - единицы становятся нулями и наоборот. Например, в результате операции ~7получится число-8. При хранении знаковых целых чисел крайний левый разряд резервируется под знак числа. Если в нем стоит0, то число положительное, а если1– отрицательное. Поэтому в результате побитового отрицания число поменяет знак.
На рис. 2.7 и 2.8 показано, как хранятся и как вычисляются отрицательные целые числа.
Рис. 2.7. Хранение отрицательных чисел
Рис. 2.8. Получение отрицательных чисел
Операция сдвига (<<- сдвиг влево или>>- сдвиг вправо) перемещает двоичное представление левого операнда на количество битов, соответствующее значению правого операнда. Например, двоичное представление короткого целого числа3–0000000000000011. Результатом операции3 << 2(сдвиг влево) будет двоичное число0000000000001100или, в десятичной записи,12. Аналогично, сдвинув число9(в двоичном виде0000000000001001) на2разряда вправо (записывается9 >> 2) получим0000000000000010, т.е.2.
При сдвиге влево число дополняется нулями справа. При сдвиге вправо бит, которым дополняется число, зависит от того, знаковое оно или беззнаковое. Для беззнаковых чисел при сдвиге вправо они всегда дополняются нулевым битом. Если же число знаковое, то значение самого левого бита числа используется для дополнения. Это объясняется тем, что самый левый бит как раз и является знаком — 0означает плюс и1означает минус. Таким образом, если
short x = 0xFF00;
unsigned short y = 0xFF00;
то результатом x >> 2будет0xFFC0(двоичное представление1111111111000000), а результатомy >> 2будет0x3FC0(двоичное представление0011111111000000).
Операция сдвига влево аналогична умножению на соответствующую степень двойки [19], а сдвиг влево – делению.