Поразрядные (побитовые) операции в языке с.

      Комментарии к записи Поразрядные (побитовые) операции в языке с. отключены

Алгоритмом называется точная инструкция исполнителю в понятной для него форме, определяющая процесс достижения поставленной цели на основе имеющихся исходных данных за конечное число шагов.

Основными свойствами алгоритмов являются:

1. Универсальность (массовость) — применимость алгоритма к различным наборам исходных данных.

2. Дискретность — процесс решения задачи по алгоритму разбит на отдельные действия.

3. Однозначность — правила и порядок выполнения действий алгоритма имеют единственное толкование.

4. Конечность — каждое из действий и весь алгоритм в целом обязательно завершаются.

5. Результативность- по завершении выполнения алгоритма обязательно получается конечный результат.

6. Выполнимость — результата алгоритма достигается за конечное число шагов.

Формы представления алгоритмов.

На практике наиболее распространены следующие формы представления алгоритмов:

  • словесная (записи на естественном языке);
  • графическая (изображения из графических символов);
  • псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.);
  • программная (тексты на языках программирования).

Словесный способ записи алгоритмов представляет собой описание последовательных этапов обработки данных. Алгоритм задается в произвольном изложении на естественном языке. Например. Записать алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел.

7. Aрифметические операции в C++:

+ — сложение

— — вычитание

* — умножение

/ — деление

% — остаток от деления

8. В С++ существует три логические операции:
1) Логическая операция И ;
2) Логическая операция ИЛИ ||;
3) Логическая операция НЕ ! или логическое отрицание.

Поразрядные (побитовые) операции в языке С.

Поразрядные (побитовые) операции можно производить с любыми целочисленными переменными и константами. Эти действия не применимы к переменным типа float, double или long double. Результаты побитовых операций будут иметь целочисленное значение. К поразрядным операциям относятся следующие операции:

  • ( или and ),
  • | ( или OR ),
  • ^ ( или XOR ),
  • — ( или NOT ),
  • сдвиг влево,
  • сдвиг вправо.

В случае побитной операции сравниваются значения каждой пары битов. Тем самым обеспечивается доступ к битам. Эти операции находят применение в драйверах устройств, программах, связанных с принтером, модемом и другими устройствами. Когда выполняются логические операции над выражениями, то в итоге Вы получаете либо 0, либо 1. Однако в случае поразрядных операций так же выполняются логические действия, но они не имеют результатом обязательно только либо 0, либо 1. Рассмотрим примеры.

1). Пусть ch=ch127;

Тогда,
если ch=’A’, т.е. 11000001
и число 127 есть 01111111
В итоге будет 01000001

Если соответствующие разряды одинаковы, то в результате имеем 1, иначе имеем 0. Так работает операция and или логическое умножение.

2). Пусть ch=ch | 128;

Тогда,
если ch=’A’, т.е. 11000001
и число 128 есть 10000000
В итоге будет 11000001

Поразрядные операции удобны для организации хранения в сжатом виде информации о состоянии некоторых переключателей: включен/выключен (on/off). В одном байте можно хранить 8 таких флагов.

3). Пусть ch является хранилищем таких флагов. Проверить, находится ли флаг в третьем бите в состоянии On, можно следующим образом:

if (ch4) printf(Третий бит содержит 1, состояние On);

Эта проверка основывается на двоичном представлении числа 4: 00000 100

Операции сдвига (влево или вправо) применимы только к целочисленным переменным. При этих операциях сдвигаются все биты левого операнда на число позиций, опеределенных выражением вправа от знака операции сдвига. Операции сдвига обозначаются двойными знаками:- сдвиг вправо.

4). Пусть x = 9, что в двоичном представлении имеет вид: 0000 1001

Тогда x=9 x=93 есть код: 00000001;
x=95 есть код: 00000000;

Легко заметить, что операция сдвига ведет к потере старших или младщих разрядов. Применение сдвиговк одной и той же величине может изменить значение этой переменной из-за потери разрядов.

5). Пусть беззнаковая величина unsigned char x=255;

Выполним сдвиг влево на 3 разряда и затем так же сдвиг вправо на 3 разряда. Получим:

x=255 x=111110003 в двоичном коде будет иметь вид: 00011111.

3. Операции [] и { } в языке С.

В языке С круглые и квадратные скобки так же рассматриваются как операции. Причем они имеют самый наивысший приоритет. Поразрядные операции порождают еще несколько сложных операций присваивания: |=, =, ^=, =.

10. Операция присваивания в языке программирования C++ обозначается знаком ‘=’. Как и другие операторы в C++, она может быть перегружена.

Операция присваивания копированием — особый вид операции присваивания, используемый для присваивания объектов одного класса друг другу. Является одним изособых членов-функций и генерируется автоматически компилятором в случае, если нет явного объявления программистом. Код, сгенерированный компилятором, выполняетповерхностное копирование.

Операция присваивания копированием отличается от конструктора копирования тем, что должен очищать члены-данные цели присваивания (и правильно обрабатывать самоприсваивание), тогда как конструктор копирования присваивает значения неинициализированным членам-данным.

11, 12, 13, 14, 15 :D. Операторы

Операторы Выражения

Самый обычный вид оператора — оператор выражение. Он состоит из выражения, за которым следует точка с запятой. Например:

a = b*3+c;
coutlseek(fd,0,2);

Пустой оператор

Простейшей формой оператора является пустой оператор:

;

Он не делает ничего. Однако он может быть полезен в тех случаях, когда синтаксис требует наличие оператора, а вам оператор не нужен.

Блоки

Блок — это возможно пустой список операторов, заключенный в фигурные скобки:

{ a=b+2; b++; }

Блок позволяет рассматривать несколько операторов как один. Область видимости имени, описанного в блоке, простирается до конца блока. Имя можно сделать невидимым с помощью описаний такого же имени во внутренних блоках.

Операторы if

Программа в следующем примере осуществляет преобразование дюймов в сантиметры и сантиметров в дюймы; предполагается, что вы укажете единицы измерения вводимых данных, добавляя i для дюймов и c для сантиметров:

Заметьте, что условие в операторе if должно быть заключено в круглые скобки.

Операторы switch

Оператор switch производит сопоставление значения с множеством констант. Проверки в предыдущем примере можно записать так:

Операторы break применяются для выхода из оператора switch. Константы в вариантах case должны быть различными, и если проверяемое значение не совпадает ни с одной из констант, выбирается вариант default. Программисту не обязательно предусматривать default.

Оператор while

Рассмотрим копирование строки, когда заданы указатель p на ее первый символ и указатель q на целевую строку. По соглашению строка оканчивается символом с целым значением 0.

while (p != 0) {
*q = *p; // скопировать символ
q = q+1;
p = p+1;
}
*q = 0; // завершающий символ 0 скопирован не был

Следующее после while условие должно быть заключено в круглые скобки. Условие вычисляется, и если его значение не ноль, выполняется непосредственно следующий за ним оператор. Это повторяется до тех пор, пока вычисление условия не даст ноль.

Этот пример слишком пространен. Можно использовать операцию ++ для непосредственного указания увеличения, и проверка упростится:

while (*p) *q++ = *p++;
*q = 0;

где конструкция *p++ означает: взять символ, на который указывает p, затем увеличить p.

Пример можно еще упростить, так как указатель p разыменовывается дважды за каждый цикл. Копирование символа можно делать тогда же, когда производится проверка условия:

while (*q++ = *p++) ;

Здесь берется символ, на который указывает p, p увеличивается, этот символ копируется туда, куда указывает q, и q увеличивается. Если символ ненулевой, цикл повторяется. Поскольку вся работа выполняется в условии, не требуется ни одного оператора. Чтобы указать на это, используется пустой оператор. C++ (как и C) одновременно любят и ненавидят за возможность такого чрезвычайно краткого ориентированного на выразительность программирования.

Оператор for

Рассмотрим копирование десяти элементов одного вектора в другой:

for (int i=0; i

Это эквивалентно

int i = 0;
while (i q[i] = p[i];
i++;
}

но более удобочитаемо, поскольку вся информация, управляющая циклом, локализована. При применении операции ++ к целой переменной к ней просто добавляется единица. Первая часть оператора for не обязательно должна быть описанием, она может быть любым оператором.

Например:

for (i=0; i

тоже эквивалентно предыдущей записи при условии, что i соответствующим образом описано раньше.

Описания

Описание — это оператор, вводящий имя в программе. Оно может также инициализировать объект с этим именем. Выполнение описания означает, что когда поток управления доходит до описания, вычисляется инициализирующее выражение (инициализатор) и производится инициализация.

15. Подпрограмма (англ. subroutine) — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. В языках программирования для оформления и использования подпрограмм существуют специальные синтаксические средства.

В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело — набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.

Вызов подпрограммы выполняется с помощью команды вызова, включающей в себя имя подпрограммы. В большинстве современных языков программирования команда вызова представляет собой просто имя вызываемой подпрограммы, за которым могут следовать фактические параметры

Статьи к прочтению:

Уроки по C++ 5 урок. Битовые операции


Похожие статьи:

  • Типы данных и операции в языке си. выражения

    Типы данных. Программа на процедурных языках, к которым относится Си, представляет собой описание операций над величинами различных типов. Тип определяет…

  • Указатели и операции с ними

    Типы данных Программы оперируют с различными данными, которые могут быть простыми и структурированными. Простые данные — это целые и вещественные числа,…