Пределы целых чисел в 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 выдает ошибку.
Завершение блока, относящегося только к системам Майкрософт
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode
Является ли число простым — Проверяем на языке Си
Напишем на языке Си программу, проверяющую является ли число простым. Для проверки будем использовать простейший алгоритм, основанный непосредственно на определении простого числа.
Простое число — определение
Простое число — это натуральное число (то есть целое и положительное), большее, чем единица, которое делится без остатка только на единицу и само на себя.
Список простых чисел (приведем до ста) начинается так: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97…
Функция на Си, проверяющая — является ли число простым
Напишем на языке Си функцию, которая будет проверять — простое ли число. И возвращать результат проверки в виде логической величины bool: true (да) или false (нет).
// функция проверяет — простое ли число n
bool isPrime ( int n )
// в цикле перебираем числа от 2 до n — 1
for ( int i = 2 ; i < n ; i ++ )
if ( n % i == 0 ) // если n делится без остатка на i - возвращаем false (число не простое)
return false ;
// если программа дошла до данного оператора, то возвращаем true (число простое) - проверка пройдена
return true ;
else // иначе возвращаем false (число не простое)
return false ;
Алгоритм проверки числа n на простоту строится на определении термина простого числа.
Во-первых число n должно быть больше 1 (проверяем это в строке 5 с помощью условного оператора if), а во-вторых проверяемое число должно иметь только два делителя: 1 и n (проверяем это в строках 8-10 с помощью цикла for и оператора if).
Для работы данного метода требуется подключить заголовочный файл stdbool.h в начале файла с исходным кодом. В stdbool.h содержится определение логических констант true и false, поскольку в чистой версии языка Си они отсутствуют.
Для подключения используем директиву include:
как проверить целое ли число язык си
мне нужно что бы пользователь ввел три целых чисел а если числа не целые то программа закрывалась я пытался делать проверку вот пример только здесь я зделал одно число что бы было проще забыл сказать нельзя использовать библеотеку math.h
int main() < int num1 = 0; scanf("%d", &num1); if (num1 % 1 != 0)< printf("eror"); >printf("%d", num1); >
только здесь оно округляет число сразу после ввода а это мне не нужно дальше я поменял переменную на double но компилятор стал ругать меня
int main() < double num1; scanf("%lf", &num1); if (num1 % 1 !=0) < printf("eror"); >printf("%lf", num1); >
помогите решить эту проблему
Отслеживать
задан 19 июн 2021 в 10:01
Михаил Кузнецов Михаил Кузнецов
29 1 1 золотой знак 1 1 серебряный знак 6 6 бронзовых знаков
Остаток от деления вещественного числа на 1 — это сильно :-). Сделайте проще: используйте приведение типа в условии (int) num1 != num1 . Кроме этого, Ваша программа напечатает число в любом случае, даже если оно не «целое». Но это уже другая история.
19 июн 2021 в 10:15
я сделал вот так ((int)num1 % 1 != num1) и все работает спасибо. проверил еще так работает (num1 % 1 != num1)
19 июн 2021 в 10:25
нееет! зачем (int)num1 % 1 ?! приведение типа уже делает целое число, зачем для целого числа бесполезное %1 . Тем более, что итоговая проверка с таким условием будет неверной.
19 июн 2021 в 10:28
мантисса типа double имеет размер 52 бита. К типу int нельзя приводить. Только к int64_t.
19 июн 2021 в 10:35
не судите строго я только начал учить программирование :3 я просто скопировал и вставил в место старого условия и оно не работает( или я вас не правильно понял
19 июн 2021 в 10:35
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
# include # include # include static inline bool isint ( double d ) < return d == (int64_t)d ; >int main()
isint(3) = 1 isint(3.1) = 0
дополнение
Если нужна точность и важность пределов целочисленного типа, то нужен двойной контроль. Сначала считываем число, потом пишем в строку. Будет считать, что введённое выражение удовлетворяет условиям, если запись целочисленного числа в сторку совпадает с введённым выражением. Не поддерживается запись с экспонентой 1e1 , с точкой 1.0 и положительное число со знаком плюс +1 .
char s[100] ; scanf("%99s",s); int i ; sscanf(s,"%d",&i); char s2[100] ; sprintf(s2,"%d",i); if (strcmp(s,s2)==0) printf("integer %d\n",i); else printf("is not integer %s\n",s);
integer 1234567890 is not integer 12345678901
Как проверить целое ли число в C++?
Чтобы проверить, является ли число целым, нам достаточно перевести его в тип int(округлить до целой части) и вычесть само число. Если результат будет равен нулю — число целое.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include using namespace std; int main() < int counter_int = 15; double counter_double = 15.121; if (int(counter_int) - counter_int == 0) cout "Число целое" endl; // Вывод : Число целое if (int(counter_double) - counter_double != 0) cout "Число нецелое" endl; // Вывод : Число нецелое return 0; >