Типы данных с плавающей точкой
Лекция4-курс-«Языки программирования»
СОДЕРЖАНИЕ
Типы данных С++. 2
Общие положения. 2
Символы.. 3
Целые числа. 4
Типы данных с плавающей точкой. 5
Булев тип данных. 6
Тип данных void. 7
Литералы.. 7
Шестнадцатеричные и восьмеричные литералы.. 8
Строковые литералы.. 8
Символьные Esc-последовательности. 8
Подробнее о переменных. 9
Инициализация переменных. 9
Динамическая инициализация переменных. 10
Операторы.. 10
Арифметические операторы.. 10
Инкремент и декремент.. 11
Операторы отношения и логические. 12
Оператор присваивания. 13
Составные присваивания. 13
Выражения. 14
Приведение типа. 14
Вопросы для самопроверки. 16
Типы данных С++
Общие положения
Ядром языка программирования являются его типы данных и операторы. Эти элементы определяют границы языка и области его применения. С++ поддерживает богатый набор типов данных и операторов, что делает его удобным для решения самого широкого круга задач программирования.
Тип, к которому принадлежит конкретная переменная, важен потому, что, во-первых - определяет допустимые операции и диапазон значений принимаемых переменной, а во-вторых, - некоторые базовые типы данных тесно привязаны к строительным блокам, которыми оперирует компьютер: байтам и словам.
Таким образом С++ позволяет работать с теми же типами данных, что и процессор. Этим и объясняется возможность использования С++ для написания чрезвычайно эффективных программ системного уровня.
|
|
Семь базовых типов данных служат ядром системы типов С++. Язык допускает указание перед некоторыми базовыми типами модификаторов, которые изменяют значение базового типа, более точно приспосабливая его к потребностям определённых ситуаций. Возможное использование модификатора с базовым типом приведено в таблице
№ п/п | Базовый тип | Значение | Модификатор | Значение с учётом модификатора | Минимальный диапазон |
1 | char | Символ | От -127 до 127 | ||
|
| Unsigned char | Символ без знака | От 0 до 255 | |
signed char | Символ со знаком | От -127 до 127 | |||
2 | wchar_t | «Широкий» символ | От 0 до 65535 | ||
3 | int | Целое | От -32768 до 32768 | ||
|
|
| unsigned int | Целое без знака | От 0 до 65535 |
signed int | Целое со знаком | От -32768 до 32768 | |||
short int | Короткое целое | От -32768 до 32768 | |||
unsigned short int | Короткое целое без знака | От 0 до 65535 | |||
long int | Длинное целое | (- +)2147483647 | |||
signed long int | Длинное целое со знаком | (- +)2147483647 | |||
unsigned long int | Длинное целое без знака | От 0 до 4294967295 | |||
4 | float | Число с плав. точкой | с 6-ю знач. цифрами | От 1Е-37 до 1Е+37 | |
5 | doubl | Число с плав. точкой удв. точности | с 10-ю знач. цифрами | От 1Е-37 до 1Е+37 | |
long double | с 10-ю знач. цифрами | От 1Е-37 до 1Е+37 | |||
6 | bool | Булева переменная | True или false | ||
7 | void | Пустой тип |
|
|
Примечание
В таблице определены минимальные диапазоны для встроенных типов данных, а не их точные границы, что позволяет каждому компилятору оптимизировать типы данных применительно к используемой операционной среде. Отчасти поэтому С++ позволяет создавать высокопроизводительное программное обеспечение. Стандарт С_++ только устанавливает, что встроенные типы данных должны удовлетворять определённым требованиям. Например, стандарт требует, чтобы тип int имел естественный размер, задаваемый архитектурой исполнительной среды. Таким образом, в 32-разрядной среде int будет иметь размер в 32 бит. В 16-разрядной длина данных типа int составит 16 бит.
Символы
Переменные типа содержат 8—битовые коды ASCII символов, например А, z или G, или любое 8-битовое число. При задании в программе символа его следует заключит в одинарные кавычки, например:
char ch;
ch = ’X’
cout << “ Это ch: ”<< ch;
При выполнении на экран будет выведено сообщение: Это ch: Х
Тип можно модифицировать с помощью модификаторов signed или unsigned. Вообще говоря, будет ли char по умолчанию со знаком или без знака, зависит от реализации. Для большинства компиляторов char считается типом со знаком. В таких средах использование char с модификатором signed является избыточным.
|
|
Тип char может содержать значения, отличные от наборов символов ASCII. Этот тип можно использовать как маленькое целое с диапазоном значений обычно от -128 до 127. Такую переменную можно использовать вместо целой. Так в ниже приведённой программе переменная типа char используется для управления циклом.
// АВС.cpp: главный файл проекта.
// Эта программа выводит латинский алфавит
// Назовите этот файл АВС.cpp
#include "stdafx.h"
#include <iostream>
using namespace std;
// C++ программа начинает своё выполнение с функции main()
int main()
{
setlocale (LC_ALL,"Russian");
char letter;
for (letter = 'A'; letter <= 'Z'; letter++)
cout << letter <<" ";
cin.get();
}
Тип wchar_t содержит символы, входящие в расширенный набор, используемый в случаях, когда число символов велико и их кодировка требует большее, чем 8 число бит, например, китайский язык. Тип wchar_t был создан в С++ для поддержки таких языков.
Целые числа
Переменные типа int содержат целые величины, у которых нет дробных частей. Переменные этого типа часто используются для управления циклами и условными предложениями, а также для счёта. Операции с величинами целого типа выполняются значительно быстрее, чем для типов с плавающей точкой.
|
|
В силу важности целых чисел для программирования, в С++ для них определён ряд вариантов. Из приведённой ранее таблицы видно, что целые могут быть обычными, короткими и длинными, со знаком и без знака, что устанавливается с использованием модификаторов. Целое со знаком может содержать как положительное так и отрицательное значение. По умолчанию тип int рассматривается как числа со знаком. Таким образом, использование модификатора signed является избыточным, но допустимым
Различие между целыми со знаком и без знака заключается в том, каким образом интерпретируется старший бит числа. Если объявлено целое со знаком, то компилятор С++ при генерации кода предполагает, что старший бит числа используется как флаг знака. Если флаг знака равен 0, то число положительное; если он равен 1, то число отрицательное. Отрицательные числа почти всегда представляются в дополнительном коде. Для получения отрицательного числа этим методом все биты числа (за исключением знака) инвертируются и к полученному числу прибавляется 1. После чего флаг знака числа устанавливается в 1.
// INT_ZN.cpp: главный файл проекта.
/* Пргорамма демонстрирует различие между
Целыми числами со знаком и без знака*/
// Назовите этот файл INT_ZN.cpp
#include "stdafx.h"
#include <iostream>
using namespace std;
// C++ программа начинает своё выполнение с функции main()
int main()
{
setlocale (LC_ALL,"Russian");
short int i; //короткое целое со знаком
unsigned short int j; //короткое целое без знака
j = 60000;
i = j;
cout << i <<" "<< j;
cin.get();
}
Вывод сообщения на экран будет выглядеть как:
-5536 60000
Примечание
В С++ можно использовать модификаторы short, long, unsigned без int. Тип int в этом случае предполагается по умолчанию. Таким образом, оба следующих предложения объявляют целые переменные без знака.
unsigned x;
unsigned int y;
Типы данных с плавающей точкой
Переменные типов float и doubl используются либо при необходимости иметь дробные числа, либопри работе с большими или, наоборот, очень маленькими числами Типы float и doubl различаются значением наибольшего (наименьшего) числа, которое может содержаться в переменных этих типов. Обычно тип doubl может хранить число, приблизительно на 10 порядков больше чем float.
В программах чаще используется тип doubl. Одна из причин этого заключается в том, что многие математические функции используют значения типа doubl. Например, функция sqrt() возвращает значение типа doubl, являющееся квадратным корнем из аргумента того же типа.
// DLGP.cpp: главный файл проекта.
/* Использование теоремы Пифагора для нахождения
длины гипотенузы прямоугольного треугольника
при заданных длинах двух его катетов*/
// Назовите этот файл DLGP.cpp
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
// C++ программа начинает своё выполнение с функции main()
int main()
{
setlocale (LC_ALL,"Russian");
double x, y, z;
x = 5.0;
y = 4.0;
z = sqrt(x*x + y*y);
cout << "Гипотенуза равна "<< z;
cin.get();
}
Вывод сообщения на экран будет выглядеть как:
Гипотенуза равна 6.40312
Тип long double позволяет работать с очень большими или очень маленькими числами. Наиболее полезен этот тип в программах для научных исследований. Например, типом long double можно пользоваться для анализа астрономических данных
Булев тип данных
Тип bool является относительно новым добавлением в С++. Он хранит булевы (истина или ложь) значения. В С++ определены две булевы константы true (истина) и false (ложь), которые только можно использовать с переменными этого типа.
Одной из фундаментальных концепций C++ является интерпретация любого ненулевого значения как true, а нулевого – как false. Эта концепция полностью совместима с типом, потому что при использовании в булевом выражении С++ автоматически преобразует любое ненулевое значение в true , а ненулевое – в false. Справедливо также и обратное: при использовании в не булевом выражении true преобразуется в 1, а false - -в 0.
Далее приведена программа, демонстрирующая использование типа bool:
/ EX_BOOL.cpp: главный файл проекта.
// Демонстрация булевых значений
// Назовите этот файл EX_BOOL.cpp
#include "stdafx.h"
#include <iostream>
using namespace std;
// C++ программа начинает своё выполнение с функции main()
int main()
{
setlocale (LC_ALL,"Russian");
bool b;
b = false;
cout << "b равно "<< b <<"\n";
b = true;
cout << "b равно "<< b <<"\n";
// булево значение может управлять предложением if
if (b) cout << "Это выполняется.\n";
b = false;
if (b) cout << "Это не выполняется.\n";
// результатом действия оператора отношения является
// значение true/ false
cout << "10 > 9 есть "<< (10 >9) <<"\n";
cin.get();
}
Вывод программы должен быть:
B равно 0
B равно 1
Это выполняется
10 >9 есть 1
Таким образом:
· Если значение типа bool выводится с помощью cout, на экране отображается 0 или 1. Однако существуют опции вывода, позволяющие вывести на экран слова true и false.
· Значение булевой переменной может использоваться для управления предложением if.
· Результатом действия оператора отношения, например, >, является булево значение. Именно поэтому выражение 10 > 9 выводит значение 1. Вокруг выражения необходимы дополнительные скобки, потому что оператор << имеет более высокий приоритет, чем >.
Тип данных void
Тип void описывает выражение, не имеющее значение. В примерах далее будет показано, как это может быть использовано в программе.
Проект 2-1 Разговор с Марсом
Кратчайшее расстояние между Землёй и Марсом 34 000 000 миль. Следует рассчитать, какова будет задержка между моментом отправления радиосигнала с Земли и моментом достижения им Марса.
Радиосигнал распространяется со скоростью света, т.е. приблизительно 186000 миль в секунду. Для определения задержки следует расстояние разделить на скорость света. Время задержки выразить в секундах и в минутах.
// MARS.cpp: главный файл проекта.
// Назовите этот файл MARS.cpp
#include "stdafx.h"
#include <iostream>
using namespace std;
// C++ программа начинает своё выполнение с функции main()
int main()
{
setlocale (LC_ALL,"Russian");
double dist; // расстояние
double lspeed; //скорость света
double delay; //задержка в секундах
double delay_min; // задержка в минутах
}
Вывод программы на экран следующий:
Временная задержка при разговоре с Марсом: 182.796 секунд.
Это составляет 3.04659 минут.
Допишите программу и получите верный результат.
Литералы
Литералами (константами) называют фиксированные значения, которые может прочитать человек, и которые не могут быть изменены программой
В С++ литералы могут быть любого из базовых типов данных. Способ представления литерала зависит от его типа. Символьные литералы заключаются в одиночные кавычки. Числовые литералы задаются в виде чисел: целых, дробных и становятся интуитивно понятными. Однако существует несколько типов для описания целых, дробных чисел. Поэтому для правильного представления компилятор С++ автоматически принимает определённые предположения относительно типа литерала, а также для литерала можно явно указать тип.
По умолчанию компилятор С++ помещает целочисленный литерал в минимальный по размеру и совместимый с конкретным значением литерала тип данного, начиная с int, литералы с плавающей точкой получают тип double.
В тех случаях, когда предположения по умолчанию о типах числовых литералов не устраивают можно задать конкретный тип числового литерала с помощью суффикса. Примеры использования суффиксов приведены в Таблице 1.
Тип данного | Примеры констант |
int | 1 123 21000 -234 |
long int | 35000L -34L |
unsigned int | 10000U 987U 40000U |
Unsigned long | 12323UL 900000UL |
float | 123.23F 4.34e-3F |
double | 23.23 123123.33 -0.9876324 |
long double | 1001.2L |
Дата добавления: 2019-07-15; просмотров: 447; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!