Диапазоны типов данных
32-разрядные и 64-разрядные компиляторы Microsoft C++ распознают типы в таблице далее в этой статье.
Если имя начинается с двух символов подчеркивания ( __ ), тип данных является нестандартным.
Диапазоны, представленные в следующей таблице, включают указанные значения.
| Тип Имя | Байт | Другие имена | Диапазон значений |
|---|---|---|---|
| int | 4 | signed | От −2 147 483 648 до 2 147 483 647 |
| unsigned int | 4 | unsigned | От 0 до 4 294 967 295 |
| __int8 | 1 | char | От -128 до 127 |
| unsigned __int8 | 1 | unsigned char | От 0 до 255 |
| __int16 | 2 | short , short int , signed short int | От −32 768 до 32 767 |
| unsigned __int16 | 2 | unsigned short , unsigned short int | От 0 до 65 535 |
| __int32 | 4 | signed , signed int , int | От −2 147 483 648 до 2 147 483 647 |
| unsigned __int32 | 4 | unsigned , unsigned int | От 0 до 4 294 967 295 |
| __int64 | 8 | long long , signed long long | От −9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
| unsigned __int64 | 8 | unsigned long long | От 0 до 18 446 744 073 709 551 615 |
| bool | 1 | нет | false или true |
| char | 1 | нет | -128–127 по умолчанию |
В зависимости от характера использования переменная типа __wchar_t обозначает расширенный символьный или многобайтовый символьный тип. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L .
signed и unsigned — это модификаторы, которые можно использовать с любым целочисленным типом, кроме типа bool . Обратите внимание, что char , signed char и unsigned char — это три разных типа, предназначенных для механизмов, подобных перегрузке и шаблонам.
Размер типов int и unsigned int — 4 байта. Однако переносимый код не должен зависеть от размера int , поскольку языковой стандарт позволяет варьировать его в зависимости от реализации.
C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. Дополнительные сведения см. в разделе __int8, __int16, __int32, __int64 и ограничения целых чисел.
Дополнительные сведения об ограничениях размеров каждого типа см. в разделе «Встроенные типы».
Диапазон перечисляемых типов зависит от контекста языка и указанных флажков компилятора. Дополнительные сведения см. в статьях Объявления перечислений C и Объявления перечислений C++.
Что больше long long? я хочу узнать сколько 6 в 100 и написал программу но ответ в хз раз больше long long! помогите!
Для работы с длинными целыми и числами с плавающей запятой произвольной точности существует много библиотек, к примеру, https://ru.wikipedia.org/wiki/GNU_Multi-Precision_Library, некоторые языки программирования поддерживают такие числа «из коробки».
Ну и как было сказано в ответе выше, можно самому реализовать работу с «длинными целыми» — алгоритмы и структуры данных для этого описаны еще при царе горохе.
Aнто)(@Ученик (212) 7 лет назад
ra Высший разум (113233) И че теперь? Обосраться и не жить? Если и дальше будешь задавать вопросы на ответах. мыло. ру, вместо того, чтобы самому порыться в гугле, попытаться разобраться со своим вопросом, то так нубом и останешься.
Пределы целых чисел в C и C++
Ограничения для целочисленных типов в C и C++ представлены в следующей таблице. Эти ограничения заданы в стандартном файле заголовка C . Стандартный файл заголовка C++ содержит , который включает в себя .
В Microsoft C также допускается объявление целочисленных переменных с указанием размера, которые относятся к целочисленным типам с размером 8, 16, 32 или 64 бит. Дополнительные сведения о них см. в статье Целочисленные типы с указанием размера.
Ограничения для целочисленных констант
| Константа | Значение | Значение |
|---|---|---|
| CHAR_BIT | Количество битов в наименьшей переменной, которая не является битовым полем. | 8 |
| SCHAR_MIN | Минимальное значение для переменной типа signed char . | –128 |
| SCHAR_MAX | Максимальное значение для переменной типа signed char . | 127 |
| UCHAR_MAX | Максимальное значение для переменной типа unsigned char . | 255 (0xff) |
| CHAR_MIN | Минимальное значение для переменной типа char . | –128 (или 0, если используется параметр /J) |
| CHAR_MAX | Максимальное значение для переменной типа char . | –127 (или 255, если используется параметр /J) |
| MB_LEN_MAX | Максимальное число байтов в многобайтовом символе. | 5 |
| SHRT_MIN | Минимальное значение для переменной типа short . | -32768 |
| SHRT_MAX | Максимальное значение для переменной типа short . | 32767 |
| USHRT_MAX | Максимальное значение для переменной типа unsigned short . | 65 535 (0xffff) |
| INT_MIN | Минимальное значение для переменной типа int . | -2147483647 — 1 |
| INT_MAX | Максимальное значение для переменной типа int . | 2147483647 |
| UINT_MAX | Максимальное значение для переменной типа unsigned int . | 4 294 967 295 (0xffffffff) |
| LONG_MIN | Минимальное значение для переменной типа long . | -2147483647 — 1 |
| LONG_MAX | Максимальное значение для переменной типа long . | 2147483647 |
| ULONG_MAX | Максимальное значение для переменной типа unsigned long . | 4 294 967 295 (0xffffffff) |
| LLONG_MIN | Минимальное значение для переменной типа long long . | –9 223 372 036 854 775 807 – 1 |
| LLONG_MAX | Максимальное значение для переменной типа long long . | 9 223 372 036 854 775 807 |
| ULLONG_MAX | Максимальное значение для переменной типа unsigned long long . | 18 446 744 073 709 551 615 (0xffffffffffffffff) |
Если значение превышает максимально возможное представление целочисленного типа, компилятор Microsoft выдает ошибку.
Завершение блока, относящегося только к системам Майкрософт
Числовые типы данных
До сих пор рассматривались только один тип целочисленных переменных — int . На самом деле существует несколько основных целочисленных типов, тип int — лишь один (но наиболее часто используемый) из них.
Таблица основных целочисленных типов.
| Название | Размер | Знаковый | Синонимы |
|---|---|---|---|
| short | 2 байта | Знаковый | short int , signed short , signed short int |
| unsigned short | 2 байта | Беззнаковый | unsigned short int |
| int | 4 байта | Знаковый | signed int |
| unsigned | 4 байта | Беззнаковый | unsigned int |
| long | 4 байта | Знаковый | long int , signed long , signed long int |
| unsigned long | 4 байта | Беззнаковый | unsigned long int |
| long long | 8 байт | Знаковый | long long int , signed long long , signed long long int |
| unsigned long long | 8 байт | Беззнаковый | unsigned long long int |
То есть типы бывают “короткими” ( short ), обычными, длинными ( long ) и очень длинными ( long long ). Последний тип является расширением компилятора GNU C++ и не является стандартным типом для языка C++, поэтому он может отсутствовать в других реализациях языка или называться по-другому (например, в компиляторе Microsoft Visual C++ аналогичный тип называется int64 ). Чем “длиннее” тип, тем большее число различных значений он может принимать, тем больше памяти он занимает. Также типы бывают знаковыми ( signed ), которые могут принимать как положительные, так и отрицательные значения и беззнаковые ( unsigned ), которые принимают только неотрицательные значения.
Таблица значений, которые могут принимать различные типы:
| Название | Размер | Минимальное значение | Максимальное значение |
|---|---|---|---|
| short | 16 бит | -2 15 =- 32768 | 2 15 -1 = 32767 |
| unsigned short | 16 бит | 0 | 2 16 -1 = 65535 |
| int , long | 32 бита | -2 31 = -2147483648 | 2 31 -1 = 2147483647 |
| unsigned , unsigned long | 32 бита | 0 | 2 32 -1 = 4294967295 |
| long long | 64 бита | -2 63 = -9223372036854775808 | 2 63 -1 = 9223372036854775807 |
| unsigned long long | 64 бита | 0 | 2 64 -1 = 18446744073709551615 |
На самом деле в стандарте языка C++ не оговорены конкретные значения размеров типов. Оговорено только то, что одинаковые знаковые и беззнаковые типы имеют одинаковые размеры, и размер меньшего типа всегда не превосходит размера большего типа. Вот какие размеры могут быть у этих типов в зависимости от разрядности процессора компьютера:
| Тип | 16-битный процессор | 32-битный процессор | 64-битный процессор |
|---|---|---|---|
| short | 2 байта | 2 байта | 2 байта |
| int | 2 байта | 4 байта | 4 байта |
| long | 4 байта | 4 байта | 8 байт |
| long long | — | 8 байт | 8 байт |
Действительные типы
Действительные (вещественные) числа представляются в виде чисел с десятичной точкой (а не запятой, как принято при записи десятичный дробей в русский текстах). Для записи очень больших или очень маленьких по модулю чисел используется так называемая запись “с плавающей точкой” (также называемая “научная” запись). В этом случае число представляется в виде некоторой десятичной дроби, называемой мантиссой, умноженной на целочисленную степень десяти (порядок). Например, расстояние от Земли до Солнца равно 1.496·10 11 , а масса молекулы воды 2.99·10 -23 .
Числа с плавающей точкой в программах на языке C++, а также при вводы и выводе записавыются в виде мантиссы, затем пишется буква e , затем пишется порядок. Пробелы внутри этой записи не ставятся. Например, указанные выше константы можно записать в виде 1.496e11 и 2.99e-23 . Перед самим числом также может стоять знак минус.
Для представления в памяти ЭВМ действительных чисел существует три типа:
| Тип | Точность | Размер | Количество знаков мантиссы | Минимальное положительное значение | Максимальное значение |
|---|---|---|---|---|---|
| float | Одинарная | 4 байта | 7 | 1.4e-45 | 3.4e38 |
| double | Двойная | 8 байт | 15 | 5.0e-324 | 1.7e308 |
| long double | Расширенная | 10 байт | 19 | 1.9e-4951 | 1.1e4932 |
Операция деления
Для действительных чисел определены операции сложения, вычитания, умножения и деления.
При этом операция деления выполняется по-разному для переменных и констант целочисленного типа и для переменных и констант действительных типов. В первом случае деление производится нацело с отбрасыванием дробной части, во втором случае — деление производится точно и результатом является действительное число. Более точно, если делимое и делитель одновременно являются целочисленными константами или переменными целочисленных типов, то деление будет целочисленным, а если хотя бы одно из них действительное, то деление будет действительным. Например:
coutвыведет 3 в первой строке и 3.33333 в остальных строках.
Результат выполнения деления не зависит от того, какой переменной будет присвоен результат. Если написать double a = 10 / 3; , то переменная a будет равна 3, так как деление 10/3 будет целочисленным, независимо от того, чему будет присвоен результат.
Приведение типов
Иногда возникает необходимость привести выражение одного типа к такому же выражению другого типа. Например, если есть две переменные a и b типа int и требуется вычислить их частное (не целочисленное) и записать в переменную d типа double . Следующий код:
double d; d = a / bбудет неверным, т.к. деление a / b будет целочисленным. Правильный код такой:
double d; d = (double)a / b;В этом примере используется операция приведения типа: (double)a . Эта операция возвращает значение типа double , но равное значению переменной a . В результате деление будет выполняться, как деление вещественных чисел, поскольку будет выполняться деление действительного значения на целочисленное.
Операция приведения типа не меняет тип самой переменной и ее значение, а только возвращает значение другого типа.
Упражнение
Определите, чему будут равны следующие переменные
int a = 13 / 5; int b = 13 % 5; int c = 13.0 / 5; double d = 13 / 5; double e = 13 % 5; double f = 13.0 / 5; double g = 13 / 5 + 2 / 5; double h = 13.0 / 5 + 2.0 / 5; int i = 13.0 / 5 + 2.0 / 5;Список функций
В стандартную математическую библиотеку языка Си (а, значит, и C++) входит множество специальных математических функций, которые нужно знать и уметь использовать. Для того, чтобы использовать эти функции в своей программе, необходимо подключить заголовочный файл, содержащий описания этих функций, что делается строчкой в начале программы:
#include
Функция от одного аргумента вызывается, например, так: sin(x) . Вместо числа x может быть любое число, переменная или выражение. Функция возращает значение, которое можно вывести на экран, присвоить другой переменной или использовать в выражении:
y = sin(x); coutВсе перечисленные в таблице функции работают с типом double , этот тип считается основным типом для работы с действительными числами.
A: Целая часть
Дано положительное действительное число X. Выведите его целую часть.
B: Дробная часть
Дано положительное действительное число X. Выведите его дробную часть.
C: Первая цифра после точки
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. При решении этой задачи нельзя пользоваться условной инструкцией и циклом.
D: Гипотенуза
Даны длины катетов прямоугольного треугольника. Выведите длину его гипотенузы.
E: Площадь треугольника
Даны длины сторон треугольника. Вычислите площадь треугольника.
3 4 51 1 10.433013F: Часы - 1
С начала суток прошло \(H\) часов, \(M\) минут, \(S\) секунд (\(0\le H 2 /6
По данному числу n вычислите сумму \(1+\frac+\frac+. +\frac\).
Решая эту задачу не забывайте, что 1/4==0 , 1/9==0 и т.д.
31.36111Знаете ли вы, что этот ряд сходится к \(\pi^2/6\)?
O: ln 2
По данному числу n вычислите сумму \(1-\frac12+\frac13-\frac14++. +\frac>\).
Операцией возведения в степень пользоваться нельзя. Алгоритм должен иметь сложность O(n). Попробуйте также обойтись без использования инструкции if.
30.833333Этот ряд сходится к значению ln 2.
P: Геометрическая прогрессия
Забудьте формулу суммы геометрической прогрессии и вычислите сумму \(1+x+x^2+. +x^n\).
Программа получает на вход целое число n и действительное число x. Операцией возведения в степень пользоваться нельзя. Алгоритм должен иметь сложность O(n).
4 0.11.1111Q: Просто π
По данному числу n вычислите сумму \( 4\left(1-\frac13+\frac15-\frac17+. +\frac\right)\)
Операцией возведения в степень пользоваться нельзя. Алгоритм должен иметь сложность O(n).
23.46667Этот ряд сходится к числу \(\pi\).
R: Экспонента
По данному целому числу n и действительному числу x вычислите сумму \( 1+\frac+\frac+\frac+. +\frac\)
Операцией возведения в степень пользоваться нельзя. Алгоритм должен иметь сложность O(n).
2 0.11.10510 01100 12.718282Этот ряд сходится к \(e^x\) при росте \(n\).
S: Косинус
По данному целому числу n и действительному числу x вычислите сумму \( 1-\frac+\frac-\frac+. +(-1)^n\frac>\)
Операцией возведения в степень пользоваться нельзя. Алгоритм должен иметь сложность O(n).
2 0.10.99500410 0150 3.14159-1Этот ряд сходится к \(\cos x\) при росте \(n\) (углы измеряются в радианах).
T: Сумма с корнями
По данным натуральным числам n и a вычислите сумму \[ \sqrt> > > \]
3 22.13063U: Схема Горнера
Дан многочлен \(P(x)=a_nx^n+a_x^+. +a_1x+a_0\) и число \(x\). Вычислите значение этого многочлена, воспользовавшись схемой Горнера: \[ P(x)= \left( . \left( \left( \left( a_n x + a_ \right) x + a_ \right) x + a_ \right) . \right) x + a_ \]
Сначала программе подается на вход целое неотрицательное число \(n\le20\), затем действительное число \(x\), затем следует \(n+1\) вещественное число — коэффициенты многочлена от старшего к младшему. Программа должна вывести значение многочлена.
При решении этой задачи нелья использовать массивы и операцию возведения в степень. Программа должна иметь сложность O(n).
1 0
1 112 0.5
1 1 11.75V*: Система линейных уравнений - 1
Даны числа \(a\), \(b\), \(c\), \(d\), \(e\), \(f\). Известно, что система линейных уравнений \[ \cases \]
имеет ровно одно решение. Выведите два числа \(x\) и \(y\), являющиеся решением этой системы.
1 0 0 1 3 33 3W*: Первая цифра после точки
Попробуйте еще раз решить следующую задачу.
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. При решении этой задачи нельзя пользоваться условной инструкцией и циклом.
Если у вас не получается решить эту задачу, прочите примечание в конце листка.
X*: Часы - 3
Вспомните задачу K и попробуйте еще раз решить следующую задачу.
С начала суток часовая стрелка повернулась на угол в \(\alpha\) градусов. Определите сколько полных часов, минут и секунд прошло с начала суток, то есть решите задачу, обратную задаче F. Запишите ответ в три целочисленные переменные и выведите их на экран.
При решении этой задачи нельзя пользоваться условными инструкциями и циклами.
Если у вас не получается решить эту задачу, прочите примечание в конце листка.
31.0251 2 3Y**: Система линейных уравнений - 2
Даны числа \(a\), \(b\), \(c\), \(d\), \(e\), \(f\). Решите систему линейных уравнений \[ \cases \]
Вывод программы зависит от вида решения этой системы.
Если система не имеет решений, то программа должна вывести единственное число 0 .
Если система имеет бесконечно много решений, каждое из которых имеет вид \(y=kx+b\), то программа должна вывести число 1 , а затем значения \(k\) и \(b\).
Если система имеет единственное решение \((x_0,y_0)\), то программа должна вывести число 2 , а затем значения \(x_0\) и \(y_0\).
Если система имеет бесконечно много решений вида \(x=x_0\), \(y\) — любое, то программа должна вывести число 3 , а затем значение \(x_0\).
Если система имеет бесконечно много решений вида \(y=y_0\), \(x\) — любое, то программа должна вывести число 4 , а затем значение \(y_0\).
Если любая пара чисел \((x,y)\) является решением, то программа должна вывести число 5 .
Тесты к этой задаче закрытые.
1 0 0 1 3 32 3 31 1 2 2 1 21 -1 10 2 0 4 1 24 0.5Z**: Кубическое уравнение
Даны четыре действительных числа: \(A\), \(B\), \(C\), \(D\). Найдите все корни уравнения \(Ax^3+Bx^2+Cx+D=0\).
Известно, что все корни этого уравнения не превосходят по абсолютной величине 1000. Известно, что любые два корня этого уравнения различаются не менее, чем на 10 -6 .
Программа получает на вход четыре действительных числа: \(A\), \(B\), \(C\), \(D\). Любые из этих четырех чисел, но не все одновременно, могут быть равны 0.
Программа должна вывести от 0 до 3 действительных чисел: корни данного уравнения в порядке возрастания. Кратные корни должны быть выведены только один раз. Значения корней необходимо выводить с точностью до 6 знаков после точки.
1 -2 1 0Тесты к этой задаче закрытые.
Если у вас не получаются задачи.
Если вам не удается решить задачи K, W, X, то посмотрите на следующую программу:
#include using namespace std; int main()
Инструкция cout.precision(20) устанавливает количество значащих цифр при выводе действительных чисел. Откомпилируйте и запустите эту программу, подумайте над результатом ее работы. Подумайте, как это может сказаться на решении заданий K, W, X.