Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







У целых чисел при делении дробная часть отбрасывается (происходит усечение)





x = 7/5 (х примет значение 1)

5) % - деление по модулю (3) (используется только для целых чисел)

х = 7%5 (в результате получается остаток от деления х примет значение 2)

6) Сложение + x+y; 20 + x; 12+56; (5)

7) Вычитание x-y; 20 - x; 56-12; (5)

8) Операции автоуменьшения -- и автоувеличения ++ на 1 (2)

Различают 2 формы записи операции ++i - префиксная форма (увеличение переменной i происходит до следующей операции) и i++ - постфиксная форма (после).

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

 

Примеры:

++size < 18,5 сначала произойдет увеличение переменной, а затем сравнение с числом 18,5

size++ <18,5 сначала сравнение, а затем увеличение на 1.

Пусть переменным присвоены следующие значения:

y=2; n=3;

 

В результате операции y=n++ сначала переменной y присвоится значение переменной n, а затем n увеличится на 1 и y станет равным 3, а n станеьт равным 4

next=(y+n++)*6; в этом случае сначала произойдет сложение, а затем n увеличится на 1 ( на результате это не отразится) (2+3)*6=30; n=4;

next=(y+(++n))*6; в этом случае сначала n увеличится на 1. А затем уже числа будут складываться (2+4)*6=36; n=4;

 

9) Операция определения размера sizeof (2)

В скобках пишут название стандартного типа int, float, double, char либо переменной, либо массива, либо своего типа данных. То есть можно определять размерность (количество байт) типа, например: sizeof (int); а также размер переменных , например: sizeof (x). Она возвращает количество байт, выделяемых под объект в скобках. В одной машине тип может занимать 2 байта, в другой – 4 байта.

 

10) Операция присваивания = (15)

Знак = не означает в этом случае равенство. Это присваивание некоторого значения.

Например: val = 3,75; PI = 3,14;

Можно присвоить одной переменной имя другой переменной. Например: var=sum (две ячейки памяти будут иметь одно и то же значение, но разные имена).

i = i+1; математически это неверно, но поскольку = это не знак равенства, то эта запись в СИ верна. Она означает – к значению ячейки i прибавить 1 и новое значение поместить в ячейку с именем i.

Можно одно значение присваивать нескольким переменным (присваивается справа налево)

y = x = z = 1;

Нельзя присваивать значения константам. Поэтому при присваивании слева от знака = не может быть константы:

3,75 = val не верно

 

11) Операция следования , (запятая)

х=5, у=24; (16)

Выражения, разделенные запятой, будут выполняться слева направо. Символ запятая может также использоваться как разделитель (в операторах).

 

Операции отношения

 

Меньше <, (7) Больше или равно > =, (7)

Меньше или равно <=, (7) Не равно != (8)

Больше > (7) Равно = = . (8)

Используются для сравнения в условных выражениях. При этом значения операндов не изменяется, только вырабатывается значение «истина», «ложь».

Например: y>x+2, если истина, то переменная принимает любое значение, если ложь, то это нуль.

 

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



Приоритет у <, <=, =>, > выше, чем у = = и !=.

 

Все операции отношений возвращают результат «истина» или «ложь» (0 или 1). Значение переменных при этом не изменяется.

При сравнении float лучше пользоваться только операциями < и >, т.к. ошибки округления могут привести к тому, что числа окажутся неравными, хотя по логике они должны быть равны. (например 3*1/3 равно 1,0, но 1/3 в вещественном формате будет представлена как 0,999999…, и произведение не будет равно 1)

Приоритет больше чем у операции присваивания, но меньше чем у +, -.

y > x+2; - сначала сложение, затем сравнение.

 

Логические операции

 

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

1) && "И" (операция логического умножения). Выражение истинно только в том случае, если истинны выражения, стоящие до и после &&. Если первое – ложь, то дальше не проверяется) (12)

практика&&время= = совершенство

 

2) || "ИЛИ" ( логическое сложение. Выражение истинно, если одно из выражений истинно. Если первое – истина, дальше не проверяется) (13)

 

3) ! "НЕ" (отрицание) (2)

 

Булева логика:

x y && || !
0 11

 

Операнд у этой операции только один.

Пр.: if(x>0 && y<10) действие

5>2 && 4>7 - ложь

5>2 || 4>7 - истина

!(4>7) – истина

У операции ! (НЕ) очень высокий приоритет (выше только у скобок). && и || выше присваивания, но ниже чем отношения.

Операции с разрядами

 

Поразрядные логические операции. Приводят к изменению значения переменной. Действия производятся над данными класса целых и char. Они называются поразрядными, потому что они выполняются отдельно над каждым разрядом (битом) независимо от разряда, находящегося слева или справа. Это необходимо аппататчикам; у них существует понятие словосостояние устройства: готово, не готово. Я могу изменять этот бит. Так же это пригодится тем, кто работает с видеопамятью, с помощью этих операций можно поменять цвет, буквы со строчных в заглавные и наоборот (достаточно поменять бит, отвечающий за эти буквы).

1) ~ Дополнение до 1 или поразрядное отрицание. Это унарная операция изменяет каждую 1 на 0, а 0 на 1. В отличие от логического отрицания операнд здесь меняется.

~(11010) получим (00101)

 

2) & Поразрядное Ислужит для сбрасывания битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если оба соответствующих разряда операндов равны 1

(11010110) & (10110111) => (10010110) сбрасывание битов в первом операнде.

Например: ‘A’ -4116 отличаются на один бит – пятый в 2-ой системе счис-

‘a’-6116 ления

 

3) | Поразрядное ИЛИ служит для установки (выставления) битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если один (или оба) из соответствующих разрядов операндов равны 1.

(11010110) | (10110111) => (11110111) Если в надо из 0 получить 1, то в маске ставят 1.

 

4) ^ Исключающее ИЛИ. Это бинарная операция. Результат равен 1, если один из разрядов равен 1 (но не оба)

(11010110) ^ (10110111) => (01100001)

 

Таблица истинности

х у ^

 

 

Операции сдвига

 

Операции сдвига осуществляют поразрядный сдвиг операнда. Величина сдвига определяется значением правого операнда. Сдвигаемые разряды теряются. При сдвиге вправо знаковый разряд размножается.

 

1) << сдвиг влево. Разряды левого операнда сдвигаются влево на число позиций, указанное правым операндом. Освобождающиеся позиции заполняются нулями, а разряды, сдвигаемые за левый предел левого операнда, теряются.

(10001010)<<2 = = 00101000

Это равноценно умножению на 2 в степени n

number<<n – умножает number на 2 в n-й степени

 

2) >> сдвиг вправо. Разряды левого операнда сдвигаются вправо на число позиций, указанное правым операндом. Разряды, сдвигаемые за правый предел левого операнда, теряются. Для беззнаковых чисел освобожденные слева разряды заполняются нулями. Для чисел со знаком минус слева дописывают единицы, говорят, что знаковый бит размножается.

x=5=1012 x>>1 0010=210

(10001010)>>2 = = 00100010

Эта операция выполняет деление на 2n:

number>>n – делит number на 2 в n-й степени. Деление целочисленное.

 

Операция условия ?:

 

Операция состоит из двух частей (? и :) и содержит три операнда

(операнд1 ? операнд2 : операнд 3).

(выражение)? Значение 1 : значение 2

Операнд вырабатывает условие истина или ложь.

Например: (х>0)? printf(“Истина”): printf(“ложь”);

Это более короткий способ записи оператора if else и называется «условным выражением».

Например условное выражение x = (y<0)? –y : y; означает, что если у меньше 0, то х = -у, в противном случае х = у. В терминах оператора if else это выглядело бы так:

if(y<0)

x = -y;

else

x = y;

Условные выражения более компактны и приводят к получению более компактного машинного кода.

Т.о. если условие операнда 1 истинно, то значением условного выражения является величина операнда 2, если условие операнда 1 ложно – величина операнда 2.

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

Пр.: max = (а>b) ? a : b;

Си – язык выражений. Убедились?

Преобразование типов

 

В операторах и выражениях должны быть данные одного и того же типа. Но на Си возможно это нарушить (в отличие от Паскаль). Си компилятор автоматически преобразует типы, но следует соблюдать определенные правила:

1.Если производится операция над данными 2-х разных типов, то обе величины приводятся к высшему типу (происходит "повышение" типа).

2. Типы от низшего к высшему: char, short, int, long, float, double. Применение слова unsigned повышает ранг соответствующего типа со знаком.

3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение ( при этом может быть как повышение так и понижение типа). "Понижение" типа приводит к отбрасыванию разрядов.

4. При вычислениях величин типа float они автоматически преобразуются в тип double (для сохранения точности вычислений, это уменьшает ошибку округления). Конечный результат преобразуется обратно в float, если это диктуется оператором описания.

Например: int x;

а)х=5/2;

После вычисления х=2. то есть не используется правило округления, а просходит отбрасывание дробной части.

Или б)х=5,9/2; ответ х=2 (0,95 отбрасывается, потому что х int)


Пример: float y;

В)y=5/2;

Ответ : у=2,0

 

int/int=int, затем 2 повышается до float, ответ у=2,0. Достаточно написать 5,0/2,0, ответ будет верный. Но не очень хочется писать нули, поэтому делают принудительное преобразование типов.

 

Операции приведения

 

Хотя в СИ и возможно преобразование типов, лучше избегать этого и указывать точно тип данных. Это называется приведением типов.

1) (float)9=9.00

2) int num;

num = 1,6+1,7; 3,3 => 3. Сначала числа складываются, затем результат приводится к указанному типу.

num = (int)1,6+(int)1,7; 1+1 = 2. В этом случае, числа сначала приведены к данному типу, а затем складываются.

3) float y;

y=(float)5/2; ответ 2,5.

То есть для страховки от неожиданностей приводите сами к необходимому типу, не ждите сюрпризов от компилятора.

 









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.