АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Символьный тип данных (тип char)

Читайте также:
  1. II. Расчет силы сопротивления движению поезда на каждом элементе профиля пути для всех заданных скоростях движения.
  2. IV. Расчет механической мощности, реализуемой электровозом при движении с установившимися скоростями на заданных элементах профиля пути.
  3. VI. Загрузка данных на внешние носители
  4. VI. Расчет токов, потребляемых электровозом из контактной сети при движении на заданных участках пути.
  5. Администратор баз данных
  6. Анализ данных
  7. Анализ данных (для гипотезы 1)
  8. Анализ данных (для гипотезы 2)
  9. Анализ данных.
  10. Анализ документов и существующих данных
  11. Анализ и интерпретация данных
  12. Анализ и интерпретация данных.

В стандарте C++ нет типа данных, который можно было бы считать действительно символьным. Для представления символьной информации есть два типа данных, пригодных для этой цели, – это типы char и wchar_t.

Переменная типа char рассчитана на хранение только одного символа (например, буквы или пробела). В памяти компьютера символы хранятся в виде целых чисел. Соответствие между символами и их кодами определяется таблицей кодировки, которая зависит от компьютера и операционной системы. Почти во всех таблицах кодировки есть прописные и строчные буквы латинского алфавита, цифры 0,..., 9, и некоторые специальные символы. Самой распространенной таблицей кодировки является таблица символов ASCII (American Standard Code for Information Interchange – Американский стандартный код для обмена информацией).

Так как в памяти компьютера символы хранятся в виде целых чисел, то тип char на самом деле является подмножеством типа int.

Под величину символьного типа отводится 1 байт.

Тип char может использоваться со спецификаторами signed и unsigned. В данных типа signed char можно хранить значения в диапазоне от –128 до 127. При использовании типа unsigned char значения могут находиться в диапазоне от 0 до 255. Для кодировки используется код ASCII. Символы с кодами от 0 до 31 относятся к служебным и имеют самостоятельное значение только в операторах ввода-вывода.

Величины типа char также применяются для хранения чисел из указанных диапазонов.

Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например в кодировке Unicode. Размер типа wchar_t равен 2 байтам. Если в программе необходимо использовать строковые константы типа wchar_t, то их записывают с префиксом L, например, L "Слово".


 

26. Оператор присваивания

Оператор присваивания — это самый употребительный оператор. Его назначение — присвоить новое значение какой-либо переменной. В C++ имеется три формы этого оператора.

1) Простой оператор присваивания записывается так:

переменная = выражение;

Данный оператор работает следующим образом: вначале вычисляется выражение, записанное справа от символа операции = (равно), затем полученный результат присваивается переменной, стоящей слева от знака =. Тип результата должен совпадать с типом переменной, записанной слева, или быть к нему приводимым.

Слева от знака = может быть только переменная, справа же можно записать и константу, и переменную и вообще выражение любой сложности.

Пример операторов

x=3;

r=x;

y=x+3*r;

s=sin(x);

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

a=b=c=1;

Так можно сразу определить, к примеру, что в равностороннем треугольнике все стороны равны одному и тому же числу 1. Приведенный выше оператор эквивалентен последовательному выполнению трёх операторов:

a=1;

b=a;

c=b;

Естественно, нам проще записать один оператор, а не три. Программа получается короче, более естественно смотрится текст, и работает такая конструкция немного быстрее.

3) Присваивание с одновременным выполнением какой-либо операции в общем виде записывается так:

переменная знак_операции = выражение;

и равносильно записи

переменная = переменная знак_операции выражение;

Например, оператор:

s += 5; // 1-й вариант

делает то же самое, что и оператор

s = s + 5; // 2-й вариант

а именно: взять старое значение из переменной s, прибавить к нему число 5 и полученное значение снова записать в переменную s.

Как видим, запись 1-го варианта короче записи 2-го варианта, да и выполняется быстрее, так как в 1-м варианте адрес переменной s вычисляется 1 раз, а во 2-м варианте — дважды.


 

27. Арифметические операции в С/С++

Это наиболее часто используемые операции. Их смысл близок к тому, каким он известен из курса математики. Итак, перечислим их:

Знак операции Назначение Пример использования Результат
+ сложение 2+5  
- вычитание 4-1  
* умножение 3*5  
/ деление (обычное) 2.4/2 1.2
/ целочисленное деление 5/2  
% вычисление остатка при целочисленном делении 5%2  

Приоритет операций сложения и вычитания ниже, чем умножения, деления и вычисления остатка. Для изменения порядка вычисления используют круглые скобки, например для умножения на 2 суммы двух чисел A и B можно написать:

2*(A+B)

Далее. Как видно из полученных результатов, в C++ один знак / означает две разные операции. Если один или оба операнда — вещественные, то выполняется обычное деление, если оба операнда — целые, то выполняется деление нацело и результат будет целого типа. Использование этой операции требует повышенной внимательности, например, если запрограммировать вычисление математического выражения

буквально, т.е. так:

1/3*sin(2*X)

то результат вне зависимости от значения X всегда будет равен нулю, так как выражение 1/3 означает деление нацело. Для решения проблемы достаточно один из операндов сделать вещественным

1.0/3*sin(2*X)

Операция вычисления остатка (%) применима только для целочисленных операндов.

Смена знака. Унарная операция «-» означает смену знака. Как видно из общей таблицы всех операций, она имеет очень высокий приоритет — выше, чем, к примеру, у операции умножение. Поэтому в выражении

-A*B

вначале выполняется смена знака для A, а затем умножение -A на B.

Для парности имеется и операция унарный плюс, т.е. можно написать

+A

Для каких целей это использовать? Сложно сказать. Но такая возможность есть.

Более интересны, и главное, очень употребительны операции автоувеличения и автоуменьшения.

Операция автоувеличения (инкремент)

Записывается как два знака плюс (без пробелов между ними!), применяется для увеличения на единицу значения переменной, например:

A++

Исходное значение переменной A увеличивается на 1, и полученный результат сохраняется в переменной A. По полученному результату эта операция соответствует следующему выражению:

A=A+1

хотя на уровне машинных команд — это разные вещи. Операция автоувеличения эквивалентна аналогичной команде INC языка ассемблера. Имеет малый размер кода и выполняется быстрее обычного сложения. На старых процессорах типа Intel 8086 операция инкремента выполнялась в несколько раз быстрее, чем операция сложения.

Важный момент: автоувеличение применимо именно для переменной, но не для константы или выражения.

Для операции инкремент допустимы две формы записи:

префиксная — например, ++A

постфиксная — например, A++.

При префиксной форме записи делается увеличение переменной на 1 и затем используется новое значение этой переменной.

В постфиксной форме записи также переменная увеличивается на 1, но в текущем выражении используется старое значение переменной.

Рассмотрим это на примерах. Применим постфиксную форму записи. Результат:

Операции Значение переменной A Значение переменной B
A=1    
B=A++   1

Префиксная форма записи даёт такой результат:

Операции Значение переменной A Значение переменной B
A=1    
B=++A   2

Как видим, переменная A в обоих случаях изменилась на 1 и равна 2, а вот для переменной B результаты получились различными.

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

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

A++; // или

++A;

увеличивают значение переменной A и ничего более, т.е. при таком использовании они, по сути, эквивалентны.

Чаще всего инкремент используют в операторах цикла для увеличения на 1 переменной цикла.

Операция автоуменьшения (декремент)

Записывается как два знака минус (без пробелов между ними!), применяется для уменьшения на единицу значения переменной, например:

A--

Исходное значение переменной A уменьшается на 1, и полученный результат сохраняется в переменной A. По полученному результату эта операция соответствует следующему выражению:

A=A-1

Операция автоуменьшения также имеет две формы записи: постфиксная (A--) и префиксная (--A). В языка ассемблера есть соответствующая ей команда DEC. Это также одна из наиболее быстрых операций. Всё, что было сказано об особенностях работы операции автоувеличения, справедливо и для операции автоуменьшения.

 


 


1 | 2 | 3 | 4 | 5 | 6 | 7 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)