Мегаобучалка Главная | О нас | Обратная связь


Базовые стандартные типы переменных



2018-07-06 341 Обсуждений (0)
Базовые стандартные типы переменных 0.00 из 5.00 0 оценок




 

Если величина является константой, компилятор сам может распознать ее тип по тому виду, в котором она введена. В случае с переменными, обязательно должен быть объявлен ее ТИП. Программа на СИ не будет выполняться, если не описать все используемые переменные. Тип является характеристикой данных. Под типом понимается совокупность информации о данном: сколько ему нужно выделить памяти, какой вид имеет его представление, какие над ним определены операции. Для выполнения вычислений в программе задаются переменные различных типов.

Переменная – это именованный объект, который может принимать различные значения в процессе выполнения программы.

В Си определены следующие стандартные типы данных:

а) для целых чисел

Тип объем диапазон чисел

int 2 байта ± 32768

signed int ± 32768 знаковое

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 – что число необходимо печатать в десятичном формате.

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

 

Операции в языке Си применяются для представления арифметических выражений. Насчитывается около 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 11

 

Примеры:

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-й степени

 

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

 

Операция состоит из двух частей (? и :) и содержит три операнда (операнд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.

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

max = (а>b) ? a : b;

 

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

 

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

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

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

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

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

 

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

 

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

int num;

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

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

 



2018-07-06 341 Обсуждений (0)
Базовые стандартные типы переменных 0.00 из 5.00 0 оценок









Обсуждение в статье: Базовые стандартные типы переменных

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (341)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)