unsigned int 0…65535 беззнаковое

chort int короткое целое – тождественно int

long int 4 байта ± 2147483648 длинное целое

signed long int ± 2147483648 знаковое

unsigned long int 0…4294967295 беззнаковое

б) с плавающей точкой

float 4 байта 10±38

double 8 байт 10±308 двойной точности

long double 10 байт 10±4932 расширенной точности

Существует еще один тип данных - char. Он в основном используется для символов, но может также использоваться для целых чисел

char 1 байт ±128

signed char ±128

unsigned char 0 ... 255

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

Пр.: int num;

int cows, hogs;

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

Пр.: int num;

num=1024;

Можно инициализировать переменную в операторе описания:

int var = 72;

int num=1024, sum=45;

Если присваивается символьное значение переменной типа char, то необходимо не забывать брать символ в апострофы:

char isma=’S’;

т. к. если записать char isma=S, компилятор будет считать, что используется переменная с именем S, которая не описана.

В СИ имеется встроенная операция sizeof, которая позволяет определить размер объектов в байтах.

Пример:

main()

{

printf(“данные типа int занимают %d байта.\n”, sizeof(int));

НЕ нашли? Не то? Что вы ищете?

printf(“данные типа char занимают %d байта.\n”, sizeof(char));

printf(“данные типа long занимают %d байта.\n”, sizeof(long));

}

В результате будет выведена информация:

данные типа int занимают 2 байта

данные типа char занимают 1 байта

данные типа long занимают 4 байта

Символ %d указывает куда нужно вставить значение переменной. % - означает, что необходимо напечатать число, а d – что число необходимо печатать в десятичном формате.

6.  ОПЕРАЦИИ ЯЗЫКА СИ

Операции в языке Си применяются для представления арифметических выражений. Насчитывается около 40 операций и 16 приоритетов. Величина, над которой выполняется операция, называется операндом. Операции могут быть унарные (один операнд), бинарные (два операнда) и тернарные.

Арифметические операции

Можно выполнять действия над переменными, переменными и константами, константами.

Самый высокий приоритет у скобок ()

1)  Изменение знака - r = -12; - r (2)
2)  Умножения * сm = 2,54 *in; (3)

3)  Деления / var = 12.0 / 3.0; (3)

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

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

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

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

5)  Сложение + sum = 20+10; sum = 20 + x ; sum = hou + sec; (4)
6)  Вычитание (4)

7)  Операции автоуменьшения -- и автоувеличения ++ на 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;

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

Можно определять размерность (количество байт) типа sizeof (int); а также размер переменных sizeof x;

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

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

val = 3,75; PI = 3,14;

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

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

y = x = z = 1;

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

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

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

х=5, у=24; (16)

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

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

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

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

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

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

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

Все операции отношений возвращают результат «истина» или «ложь» (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

0

0

0

0  11

0

1

0

1

1

0

0

1

0

1

1

1

1

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

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

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

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

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

a>b && b>c || b>d

((a>b) && (b>c) || (b>d))

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

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

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

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

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

(10010011) & (00111101) => (00010001)

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

(10010011) | (00111101) => (10111111)

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

(10010011) ^ (00111101) => (10101110)

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

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

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

(10001010)<<2 = = 00101000

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

(10001010)>>2 = = 00100010

Эти операции выполняют эффективное умножение и деление на степени 2:

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

number>>n – делит number на 2 в n-й степени

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

Операция состоит из двух частей (? и :) и содержит три операнда (операнд1 ? операнд2 : операнд 3). Это более короткий способ записи оператора if else и называется «условным выражением».

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

if(y<0)

x = -y;

else

x = y;

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

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12