Типы данных и алфавит языка c++

Long Double in C++

The long double is another data type in C++ that is used to store floating-point numbers. It takes up the size of up to 12 bytes whereas the float and the double occupy 4 bytes and 8 bytes respectively. The values initialized with the data type long double must end with “L”. For example:

// declaring a long double variable

long double n = 1.414L;

The following example illustrates the long double in C++:

#include<iostream>

using namespace std;

int main()

{

    // initialize a variable of long double type

    long double var1 = 1.1426e+5;

    // print the size of the long double variable

    cout << «The long double takes » << sizeof(var1) << » bytes in the memory.»;

    // print the value of the long double variable

    cout << «\n\nThe value stored in the variable is: » << var1;

    cout << «\n\n»;

    return 0;

}

 

In the above example, a long double variable (var1) is initialized. The sizeof() operator determines the size of the variable var1 in bytes. The output displays the size of the variable i.e. 12 bytes and its value i.e. 114260.

Символы

В C# символы представлены не 8-разрядным кодом, как во многих других языках
программирования, например , а 16-разрядным кодом, который называется юникодом (Unicode). В юникоде набор символов представлен настолько широко, что он охватывает символы практически из всех естественных языков на свете. Если для многих
естественных языков, в том числе английского, французского и немецкого, характерны
относительно небольшие алфавиты, то в ряде других языков, например китайском,
употребляются довольно обширные наборы символов, которые нельзя представить
8-разрядным кодом. Для преодоления этого ограничения в C# определен тип char,
представляющий 16-разрядные значения без знака в пределах от 0 до 65 535. При этом
стандартный набор символов в 8-разрядном коде ASCII является подмножеством юникода в пределах от 0 до 127. Следовательно, символы в коде ASCII по-прежнему остаются действительными в C#.

Для того чтобы присвоить значение символьной переменной, достаточно заключить это значение (т.е. символ) в одинарные кавычки:

Несмотря на то что тип char определен в C# как целочисленный, его не следует
путать со всеми остальными целочисленными типами. Дело в том, что в C# отсутствует автоматическое преобразование символьных значений в целочисленные и обратно.
Например, следующий фрагмент кода содержит ошибку:

Наравне с представлением char как символьных литералов, их можно представлять
как 4-разрядные шестнадцатеричные значения Unicode (например, ‘\u0041’), целочисленные значения с приведением (например, (char) 65) или же шестнадцатеричные значения (например, ‘\x0041’). Кроме того, они могут быть представлены в виде .

В чем разница между float и double?

Float — это 32-битный тип данных с плавающей запятой одинарной точности IEEE 754. Double — это 64-битный тип данных с плавающей запятой IEEE 754 двойной точности.
Количество байтов
Длина числа с плавающей запятой составляет 4 байта. Длина двойника составляет 8 байт.
Значения по умолчанию
По умолчанию значение float равно 0,0f. По умолчанию значение double равно 0,0d.
Ключевое слово
Ключевое слово «float» используется для объявления плавающего значения. Ключевое слово double используется для объявления значения типа double.
Требуемая память
Float требует меньше памяти, чем double. Двойник требует больше памяти, чем float.

Final Thoughts!

To sum up, in this article you learned about one of the most popular and widely used primitive data types in C++ called the double data type. The double data type is used to store floating-point numbers and you can even define the precision using appropriate methods. You learned the syntax for creating a double data type and saw how the double data type works. 

Next, you learned a few rules and regulations that you must keep in mind while declaring double data types in C++. Moving ahead, you saw how and where you can use the double type with a few examples. You understood the fundamental difference between the double and float data types and used the set precision method to set the number of precision digits in a double value. In the end, you learned how to use another variation of double called long double to store even larger double data types.

If you want to learn more about such fundamental concepts in C++, you can check our complete guide on C++ for beginners.

If you want to pursue a career in Full Stack Web Development, you should check out Simplilearn’s 9-month training program on full-stack web development taught by industry experts. These experts will be available with you throughout your journey to solve your queries. You will learn skills and tools such as Java and its frameworks including spring, hibernate, JPA, etc., agile methodologies, DevOps, front-end tools such as CSS, HTML, JS, servlets, etc.

If you are interested in learning more about such technologies, check out our complete list of and try a few.

If you have any queries related to this article on “C++ double” or any other suggestions, please use the comment box to drop a comment and our experts will get back to you as soon as possible.

Happy Learning!

Нормальная и нормализованная форма[править]

Нормальной формой (англ. normal form) числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале . Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, можно записать в 4 формах — , , , ), поэтому распространена также другая форма записи — нормализованная (англ. normalized), в которой мантисса десятичного числа принимает значения от (включительно) до (не включительно), а мантисса двоичного числа принимает значения от (включительно) до (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме ) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа (а заодно и некоторых других , таких как и ).
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).

Вещественные типы данных

В языке C существует три типа чисел с плавающей точкой: float и double (двойной точности) и long double. Также существует три формата вывода вещественных чисел, причем они не связаны с типами, а связаны с удобством представления числа. Вещественные числа могут иметь высокую точность, очень маленькое или очень большое значение. Если выполнить функции printf() с такими параметрами:

double a = 0.0005;
printf("%f\n", a);
printf("%g\n", 0.0005);
printf("%g\n", 0.00005);
printf("%e\n", 0.0005);

, то на экране мы увидим следующее:

0.000500 
0.0005 
5e-05 
5.000000e-04

В первом случае (%f) выводится число в обычном виде. По умолчанию точность представления числа равна шести знакам после точки.

Во втором случае (%g) число выводится как обычно, если количество значащих нулей не больше четырех. Если количество значащих нулей четыре и больше, то число выводится в нормализованном виде (третий случай). Запись 5e-5 означает 5 * 10-5, что равно 0.00005. А, например, запись 4.325e+3 является экспоненциальной записью 4.325 * 103, что равно 4325. Если с такой формой представления чисел вы сталкиваетесь первый раз, то почитайте дополнительные источники, например, статью в Википедии «Экспоненциальная запись».

Четвертый формат (%e) выведет число исключительно в нормализованном виде, каким бы это вещественное число ни было.

Если при выводе требуется округлить число до определенной точности, то перед буквой-форматом ставят точку и число-указатель точности. Например, printf(«%.2f», 0.23) выведет на экран 0.23, а не 0.230000. Когда требуется указать еще и поле, то его ширину прописывают перед точкой, например, %10.3f.

Действительные типы

Действительные (вещественные) числа представляются в виде чисел с десятичной точкой (а не запятой, как принято
при записи десятичный дробей в русский текстах). Для записи очень больших или очень маленьких
по модулю чисел используется так называемая запись “с плавающей точкой”
(также называемая “научная” запись). В этом случае число представляется в виде
некоторой десятичной дроби, называемой мантиссой, умноженной на целочисленную степень десяти
(порядок). Например, расстояние от Земли
до Солнца равно 1.496·1011, а масса молекулы воды 2.99·10-23.

Числа с плавающей точкой в программах на языке C++, а также при вводы и выводе записавыются
в виде мантиссы, затем пишется буква , затем пишется порядок. Пробелы внутри этой
записи не ставятся. Например, указанные выше константы можно записать в виде
и . Перед самим числом также может стоять знак минус.

Для представления в памяти ЭВМ действительных чисел существует три типа:

Тип Точность Размер Количество знаков мантиссы Минимальное положительное значение Максимальное значение
Одинарная 4 байта 7 1.4e-45 3.4e38
Двойная 8 байт 15 5.0e-324 1.7e308
Расширенная 10 байт 19 1.9e-4951 1.1e4932

C# decimal round

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

Существует 4 способа округления:1 , то есть десятичный метод — — округление десятичного значения до ближайшего целого числа;

Пример:

// C# program to demonstrate the
// Decimal.Round(Decimal) Method
using System;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        try {
  
            // Declaring and initializing value
            decimal value = 184467440737095.51615M;
  
            // getting rounded decimal
            // using Round() method
            decimal round = Decimal.Round(value);
  
            // Display the value
            Console.WriteLine("Rounded value is {0}", round);
        }
  
        catch (OverflowException e) 
        {
            Console.WriteLine("Value must not be out of bound");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

Вывод: округленное значение 2 — округление значения до указанного количества десятичных знаков;

Пример:

// C# program to demonstrate the
// Decimal.Round(Decimal) Method
using System;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        try {
  
            // Declaring and initializing value
            decimal value = 7922816251426433759354.39503305M;
  
            // getting rounded decimal
            // using Round() method
            decimal round = Decimal.Round(value, 4);
  
            // Display the value
            Console.WriteLine("Rounded value is {0}", round);
        }
  
        catch (ArgumentOutOfRangeException e) 
        {
            Console.WriteLine("decimal place is not within bound");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

Вывод: округленное значение .

3;

4.

Десятичный тип данных

Для представления чисел с плавающей точкой высокой точности предусмотрен также десятичный тип decimal, который предназначен для применения в финансовых расчетах. Этот тип имеет разрядность 128 бит для представления числовых значений в пределах от 1Е-28 до 7,9Е+28. Вам, вероятно, известно, что для обычных арифметических вычислений с плавающей точкой характерны ошибки округления десятичных значений. Эти ошибки исключаются при использовании типа decimal, который позволяет представить числа с точностью до 28 (а иногда и 29) десятичных разрядов. Благодаря тому что этот тип данных способен представлять десятичные значения без ошибок округления, он особенно удобен для расчетов, связанных с финансами:

Результатом работы данной программы будет:

Разбор кода на C++

Обратите внимание на 7-ю строку кода. В ней мы запускаем процесс объявления переменных «a» и «b», относящихся к типу int

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

В 9-й строке вы увидите новую, ранее еще не виденную вами, конструкцию – cin >>. Предназначена она для запроса ввода переменной «a». Для того, чтобы запросить значение переменной «b» используется аналогичная схема. Главное – следите за отсутствие ошибок, которые могут помешать качественному выполнению задачи.

В 12-й строке запускается инициализацию переменной «c». Проще говоря, происходит суммирование переменных «a» и «b». Результат математического действия выводится на экран при помощи оператора cout.

Процесс вывода переменных не подразумевается наличие кавычек. Кавычки используются только в строчках.

Преобразования Conversions

Существует только одно неявное преобразование между числовыми типами с плавающей запятой: из float в double . There is only one implicit conversion between floating-point numeric types: from float to double . Однако можно преобразовать любой тип с плавающей запятой в любой другой тип с плавающей запятой с помощьюявного приведения. However, you can convert any floating-point type to any other floating-point type with the explicit cast. Для получения дополнительной информации см. статью Встроенные числовые преобразования. For more information, see Built-in numeric conversions.

Тип ссылки

Типы ссылок не содержат фактических данных, хранящихся в переменной, но они содержат ссылку на переменные.

Другими словами, они относятся к ячейке памяти. Используя несколько переменных, ссылочные типы могут ссылаться на ячейку памяти. Если данные в ячейке памяти изменяются одной из переменных, другая переменная автоматически отражает это изменение в значении. Пример встроенных ссылочных типов: object , dynamic и string .

Тип объекта

Тип объекта является конечным базовым классом для всех типов данных в C # Common System Type (CTS). Объект — это псевдоним для класса System.Object. Типы объектов могут быть назначены значения любых других типов, типов значений, ссылочных типов, предопределенных или определяемых пользователем типов. Однако перед назначением значений требуется преобразование типов.

Когда тип значения преобразуется в тип объекта, он называется бокс, а с другой стороны, когда тип объекта преобразуется в тип значения, он называется распаковкой .

Объявление переменных

В си переменные объявляются всегда в начале блока (блок — участок кода ,ограниченный фигурными скобками)

<возвращаемый тип> <имя функции> (<тип> <аргумент>) {
	объявление переменных

	всё остальное
}

При объявлении переменной пишется её тип и имя.

int a;
double parameter;

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

long long arg1, arg2, arg3;

Например

#include <stdio.h>
#include <conio.h>

int main() {
	int a = 10;
	int b;
	while (a>0){
		int z = a*a;
		b += z;
	}
}

Здесь объявлены переменные a и b внутри функции main, и переменная z внутри тела цикла.
Следующий код вызовет ошибку компиляции

int main() {

	int i;
	i = 10;
	int j;
}

Это связано с тем, что объявление переменной стоит после оператора присваивания.
При объявлении переменных можно их сразу инициализировать.
int i = 0;
При этом инициализация при объявлении переменной не считается за отдельный оператор, поэтому следующий код будет работать

int main() {

	int i = 10;
	int j;
}

Управляющие символы

С некоторыми из этих самых «управляющих символов» Вы уже знакомы (например, с \n). Все они начинаются с обратного «слеша», а также обрамляются двойными кавычками.

Изображение

Шестнадцатеричный код

Наименование

\a

7

Звуковой сигнал бипера

\b

8

Возврат на шаг

\f

С

Перевод страницы (формата)

\n

А

Перевод строки

\r

D

Возврат каретки

\t

9

Горизонтальная табуляция

\v

В

Вертикальная табуляция

\\

Обратная косая черта

\’

27

Апостроф

22

Кавычка

\?

3F

Вопросительный знак

\0ddd

Восьмеричный код символа

\0xddd

ddd

Шестнадцатеричный код символа

Управляющие символы, которые кстати можно встретить под названиям «escape-последовательности», в основном используются для отображения символов, не имеющих визуального эффекта.

Examples of C++ Double

The following examples illustrate the double data type in C++.

Example 1: Program to Find the Surface Area and Volume of a Sphere

#include <iostream>

using namespace std;

// function to calculate surface area and volume

// of a sphere

void sphere(int radius)

{

    // variables to hold double values

    double surfaceArea, sphereVolume;

    surfaceArea = 4 * 3.14 * radius * radius;

    sphereVolume = (surfaceArea * radius ) / 3; 

    cout << «The surface area of the sphere is: » << surfaceArea;

    cout << «\n\nThe volume of the sphere is: » << sphereVolume; 

}

int main()

{

    int radius = 6;

    sphere(radius);

    cout << «\n\n»;

    return 0;

}

 

In the above example, the variables surfaceArea and sphereVolume of double type are declared to store the results calculated in the function sphere(). The function finds the surface area and volume of a sphere, which can be floating-point values.

Example 2: Program to Perform Arithmetic Operations on the Double Type Values

#include <iostream>

using namespace std;

double findSum(double x, double y)

{

    return x + y;

}

double findDifference(double x, double y)

{

    return x — y;

}

double findProduct(double x, double y)

{

    return x * y;

double findQuotient(double x, double y)

{

    return x / y;

}

int main()

{

    double value1 = 10.45, value2 = 6.28;    

    cout << «The sum is: » << findSum(value1, value2) << «\n\n»;

    cout << «The difference is: » << findDifference(value1, value2) << «\n\n»;

    cout << «The product is: » << findProduct(value1, value2) << «\n\n»;

    cout << «The quotient is: » << findQuotient(value1, value2) << «\n\n»; 

    return 0;

}

 

In the above example, the basic arithmetic operations, addition, subtraction, multiplication, and division are performed on two double operands value1 and  value2. The result of their division produces 1.664012738, but only 6 digits are printed because the cout only prints 6 digits by default by rounding off the value.

Example 3: Program to Find the Cube Root of a Number

#include <iostream>

using namespace std;

double findCube(double num)

{

    double ans;

    double precision = 0.000001;

    // calculate the integer part

    for (double ans = 1; (ans * ans * ans) <= num; ++ans)

        ;

    ans—;

    // Calculate the fractional part

    for (ans; (ans * ans * ans) < num; ans += precision)

        ;

    return ans;

int main()

{

    int num = 5;

    cout << «The cube root of the number is: «;

    cout << findCube(num) << «\n\n»; 

    return 0;

}

 

Методичка 3. C# Уровень 1. Методы. От структур к объектам.

  1. а) Дописать структуру Complex, добавив метод вычитания комплексных чисел. Продемонстрировать работу структуры.
    б) Дописать класс Complex, добавив методы вычитания и произведения чисел. Проверить работу класса.
    в) Добавить диалог с использованием switch демонстрирующий работу класса.
  2. а) С клавиатуры вводятся числа, пока не будет введён 0 (каждое число в новой строке). Требуется подсчитать сумму всех нечётных положительных чисел. Сами числа и сумму вывести на экран, используя tryParse.
  3. *Описать класс дробей — рациональных чисел, являющихся отношением двух целых чисел. Предусмотреть методы сложения, вычитания, умножения и деления дробей. Написать программу, демонстрирующую все разработанные элементы класса.
  • Добавить свойства типа int для доступа к числителю и знаменателю;
  • Добавить свойство типа double только на чтение, чтобы получить десятичную дробь числа;
    ** Добавить проверку, чтобы знаменатель не равнялся 0. Выбрасывать исключение ArgumentException(«Знаменатель не может быть равен 0»);
    *** Добавить упрощение дробей.

Символы

Под символьный тип данных отводится 1 байт памяти. У каждого символа есть соответствующее ему целое число по таблице символов ASCII.

Тип char языка программирования C включает диапазон чисел от -128 до 127. Значения от 0 до 127 могут быть заданы или выведены на экран в виде соответствующих символов (на самом деле не все). Если значение переменной задается в виде символа, то символ заключается в одиночные кавычки, например, так: ‘w’. Также в языке существует тип unsigned char с диапазоном чисел от 0 до 255.

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

Если в программе вы будете использовать целые числа со значениями до 127 или 255 и хотите сэкономить память, то объявите переменную как char или unsigned char.

Получается, что в программе символы — это числа, а числа — символы. Тогда как указать, что мы хотим видеть на экране: символ или число? Для вывода на экран символов используется спецификация формата вида %c.

Так программа, представленная ниже,

#include <stdio.h>
main() {
    char ch = 63;
    unsigned char uch = 'r';
    short j = 'b', k = 99;

    printf("%c == %d\n", ch, ch);
    printf("%c == %d\n", uch, uch);
    printf("%c, %c\n", j, k);
}

выдает такой результат:

? == 63
r == 114
b, c

Число 63 по таблице символов ASCII соответствует знаку ‘?’. Сначала мы выводим значение переменной ch в формате символа, затем – числа. Тоже самое с переменной uch, однако ее значение было задано через символ, а не число.

Математические операции в C++

В С++ есть пять базовых математических операций:

  1. Сложение (+).
  2. Вычитание (-).
  3. Умножение (*).
  4. Деление (/).
  5. Остаток от деления (%).

Используются они следующим образом:

Важно! Сначала выполняется правая часть выражения после знака =, а потом левая. То есть переменной не будет присвоено значения, пока не выполнены все вычисления

Поэтому можно записать в переменную результат вычислений, в которых использовалась эта же переменная:

Если вам нужно провести какую-то операцию с переменной, а потом записать значение в неё же, используйте следующие операторы:

Во время работы с С++ вы будете часто прибавлять или отнимать единицу от какой-нибудь переменной. Для этого тоже есть сокращённая запись:

Инкремент и декремент могут быть префиксными (++x) и постфиксными (x++). Префиксный инкремент сначала прибавляет к переменной единицу, а потом использует эту переменную, а постфиксный — наоборот.

Значения переменных по умолчанию

Как мы уже отмечали, в зависимости от типа данных у каждой переменной есть значение по умолчанию. Оно присваивается при её создании.

В этом примере значения по умолчанию получат все переменные:

А в этом примере значения получают только переменные класса: когда мы создадим класс Cat, по умолчанию weight будет равен 0.0.

Но локальные переменные нужно инициировать сразу при создании. Если написать просто int sum; , компилятор выдаст ошибку: java: variable a might not have been initialized.

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

Тип BINARY_INTEGER

Тип данных позволяет хранить целые числа со знаком в двоичном формате. Семантика этого типа данных изменилась в Oracle10g Release 1. Начиная с этой версии тип стал эквивалентным . В Oracle9i Release 2 и более ранних версиях тип отличался от тем, что он был реализован с использованием платформенно-независимого библиотечного кода.

Любопытная подробность: казалось бы, в пакете тип ограничивается значениями от −2 147 483 647 до 2 147 483 647, однако в моей программе не инициировались исключения при присваивании значений из диапазона от −2 147 483 648 до 2 147 483 647 (немного расширенного в отрицательной части): 

subtype BINARY_INTEGER is INTEGER range '-2147483647'..2147483647;

Тип не рекомендуется использовать в новых разработках — разве что вам потребуется, чтобы код работал в старых версиях Oracle до 7.3 (версия, в которой появился тип ). Надеюсь, вам не приходится иметь дела с такими древностями!

Типы данных в программировании

Чаще всего используются следующие типы данных:

  • int — целое число;
  • byte — число от 0 до 255;
  • float — число с плавающей запятой;
  • double — число с плавающей запятой повышенной точности;
  • char — символ;
  • bool — логический тип, который может содержать в себе значения true (истина) и false (ложь).

Эти типы данных называются примитивными (значимыми), потому что они базово встроены в язык.

Также существуют ссылочные типы — такие переменные хранят в себе не само значение, а ссылку на него в оперативной памяти. К ссылочным типам относятся массивы, объекты, строки (так называют любой текст) и многое другое. Для строк используется тип std: string.

Вот несколько примеров переменных разных типов:

Типы с плавающей точкой

Типы с плавающей точкой позволяют представлять числа с дробной частью. В C#
имеются две разновидности типов данных с плавающей точкой: float и double. Они
представляют числовые значения с одинарной и двойной точностью соответственно.
Так, разрядность типа float составляет 32 бита, что приближенно соответствует диапазону представления чисел от 5E-45 до 3,4E+38. А разрядность типа double составляет
64 бита, что приближенно соответствует диапазону представления чисел от 5E-324 до
1,7Е+308.

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

Если нецелочисленное значение жестко кодируется в исходном тексте (например, 12.3), то обычно компилятор предполагает, что подразумевается значение типа double.
Если значение необходимо специфицировать как float, потребуется добавить к нему символ F (или f):

Данные в языке C++

Для решения задачи в любой программе выполняется обработка каких-либо данных. Они могут быть различных типов: целые и вещественные числа, символы, строки, массивы. Данные в языке C++ принято описывать в начале функции. К основным типам данных языка относят:

Для формирования других типов данных используют основные и так называемые спецификаторы. В C++ определенны четыре спецификатора типов данных:

  • short — короткий;
  • long — длинный;
  • signed — знаковый;
  • unsigned — беззнаковый.

Когда необходимо инициализировать константную переменную (значение остается неизменным), следует перед типом написать const. Например:

const int var;

Символьный тип

Данные типа char в памяти компьютера всегда занимают 1 байт. Символьный тип может быть со знаком или без него. В величинах со знаком signed char можно хранить значение от -128 до 127. Соответственно значения переменных типа unsigned char могут находиться в диапазоне от 0 до 255. При работе с символьными данными нужно помнить, что если в выражении встречается одиночный символ, то он должен быть заключен в одинарные кавычки (‘a’).

Целочисленный тип

Переменная типа int в памяти компьютера может занимать либо 2, либо 4 байта. Это зависит разрядности процессора. По умолчанию все целые типы считаются знаковыми, то есть спецификатор signed можно не указывать. Спецификатор unsigned позволяет представлять только положительные числа. Ниже представлены некоторые диапазоны значений целого типа

Тип Диапазон Размер
int -2147483648…2147483647 4 байта
unsigned int 0…4294967295 4 байта
signed int -2147483648…2147483647 4 байта
short int -32768…32767 2 байта
long int -2147483648…2147483647 4 байта
unsigned short int 0…65535 2 байта

Вещественный тип

Число с плавающей точкой представлено в форме mE +- p, где m — мантисса (целое или дробное число с десятичной точкой), p — порядок (целое число). Обычно величины типа float занимают 4 байта, а double 8 байт. Таблица диапазонов значений вещественного типа:

float 3,4E-38…3,4E+38 4 байта
double 1,7E-308…1,7E+308 8 байт
long double 3,4E-4932…3,4E+4932 8 байт

Логический тип

Переменная типа bool может принимать только два значения true (истина) или fasle (ложь). Любоезначение, не равное нулю, интерпретируется как true. Значение false представлено в памяти как 0.

Тип void

Множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.

Десятичный тип данных

Для представления чисел с плавающей точкой высокой точности предусмотрен также
десятичный тип decimal, который предназначен для применения в финансовых расчетах. Этот тип
имеет разрядность 128 бит для представления числовых значений в пределах от 1Е-28
до 7,9Е+28. Вам, вероятно, известно, что для обычных арифметических вычислений
с плавающей точкой характерны ошибки округления десятичных значений. Эти ошибки исключаются при использовании типа decimal, который позволяет представить
числа с точностью до 28 (а иногда и 29) десятичных разрядов. Благодаря тому что этот
тип данных способен представлять десятичные значения без ошибок округления, он
особенно удобен для расчетов, связанных с финансами:

Результатом работы данной программы будет:

Nullable-типы (нулевые типы) и операция ??

Объявление и инициализация Nullable-переменных

В работе с типами-значениями есть одна особенность, они не могут иметь значение null. При наличии любой из следующих строк кода, компиляция программы не будет выполнена:

int nv = null;
bool bv = null;

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

Можно объявить переменную с использованием символа ? после указания типа, тогда она станет nullable-переменной – переменной поддерживающей null-значение:

int? nv1 = null;
bool? bv1 = null;

Использование символа ? является синтаксическим сахаром для конструкции Nullable<T>, где T – это имя типа. Представленные выше примеры можно переписать так:

Nullable<int> nv1 = null;
Nullable<bool> bv1 = null;

Проверка на null. Работа с HasValue и Value

Для того чтобы проверить, что переменная имеет значение null можно воспользоваться оператором is с шаблоном типа:

bool? flagA = true;

if(flagA is bool valueOfFlag)
{
    Console.WriteLine("flagA is not null, value: {valueOfFlag}");
}

Также можно воспользоваться свойствами класса Nullable

  • Nullable<T>.HasValue

    Возвращает true если переменная имеет значение базового типа. То есть если она не null.

  • Nullable<T>.Value

    Возвращает значение переменной если HasValue равно true, иначе выбрасывает исключение InvalidOperationException.

bool? flagB = false;

if(flagB.HasValue)
{
    Console.WriteLine("flagB is not null, value: {flagB.Value}");
}

Приведение Nullable-переменной к базовому типу

При работе с Nullable-переменными их нельзя напрямую присваивать переменным базового типа. Следующий код не будет скомпилирован:

double? nvd1 = 12.3;
double nvd2 = nvd1; // error

Для приведения Nullable-переменной к базовому типу можно воспользоваться явным приведением:

double nvd3 = (double) nvd1;

В этом случае следует помнить, что если значение Nullable-переменной равно null, то при выполнении данной операции будет выброшено исключение InvalidOperationException.

Второй вариант – это использование оператора ??, при этом нужно дополнительно задаться значением, которое будет присвоено переменной базового типа если в исходной лежит значение null

double nvd4 = nvd1 ?? 0.0;
Console.WriteLine(nvd4);


bool? nvb1 = null;
bool nvb2 = nvb1 ?? false;
Console.WriteLine(nvb1);
Console.WriteLine(nvb2);

Второй вариант позволяет более лаконично обрабатывать ситуацию, когда вызов какого-то метода может возвращать null, а результат его работы нужно присвоить типу-значению, при этом заранее известно, какое значение нужно присвоить переменной в этой ситуации:

static int? GetValue(bool flag)
{
    if (flag == true)
        return 1000;
    else
        return null;
}

static void Main(string[] args)
{
    int test1 = GetValue(true) ?? 123;
    Console.WriteLine(test1);
    int test2 = GetValue(false) ?? 123;
    Console.WriteLine(test2);
}

Использование суффиксов float, decimal, double

У некоторых числовых типов имеются суффиксы, позволяющие записывать значение типа в переменную.

Тип C# Диапазон Точность/Знаков после запятой Размер/байт Системный тип
±1,5 x 10-45…±3,4 x 1038 6-9 4
±5,0 × 10-324…±1,7 × 10308 15-17 8
±1,0 x 10-28…±7,9228 x 1028 28-29 16

Ключевые слова из колонки Тип C# взаимозаменяемы с системными типами.

Пример:

double a = 12.3;
System.Double b = 12.3;

Все типы с плавающей запятой имеют свои константы и . Типы и в дополнение имеют константы, которые обозначают нечисловые и бесконечные значения.

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

Литералы

Тип определяется суффиксом:

  • имеет суффиксы или ;
  • имеет суффиксы или ;
  • имеет суффиксы или .

Пример:

double d = 3D;
d = 4d;
d = 3.934_001;

float f = 3_000.5F;
f = 5.4f;

decimal myMoney = 3_000.5m;
myMoney = 400.75M;

Функция printf() и форматированный вывод

Вывод символов на экран, а точнее в стандартный поток вывода, осуществляется в языке C помощью функции printf(). Эта функция выводит на экран строку, переданную первым аргументом, предварительно заменив в ней специальные комбинации символов преобразованными в символы данными, переданными последующими аргументами. Следующие после первой строки данные могут быть строками, символами, целыми или вещественными числами, а также указателями. У каждого типа данных имеется свое обозначение — своя спецификация формата.

На прошлом уроке мы выводили строку «Hello World» вот так:

printf("Hello World\n");

Однако то же самое можно было получить так:

printf("%s\n", "Hello World");

Здесь %s — это спецификация строкового формата, т. е. вместо %s будет подставлен следующий аргумент, данные которого должны быть строкой. Вывод целого числа может выглядеть так:

printf("%d\n", 5);

Вместо числа 5 может стоять переменная целочисленного типа. Функция printf() может принимать произвольное число аргументов:

printf("%d %s, %d %s.\n", 3, "dogs", 2, "cats");

При выводе данные подставляются по очередности следования: 3 на место первой спецификации, dogs на место второй и т.д. То есть следует строго соблюдать соответствие форматов и последующих данных.

Под выводимые данные можно выделять больше знакомест, чем необходимо. Для этого между знаком % и буквой формата прописывается целое число, обозначающие ширину поля, например так: %10d. По умолчанию выравнивание происходит по правому краю. Для выравнивания по левому краю перед числом ставится знак минус.

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

Итог

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

В C# типы данных подразделяются на две большие группы:

  • типы значений (входит большинство встроенных типов в т.ч. пользовательские) — для их создания применяется ключевое слово ;
  • ссылочные типы — для их создания применяется ключевое слово .

Закрепить материал по типам C#-данных можно на основе этого замечательного видео, где дополняется все сказаное нами:

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: