Как бы вы установили переменную равной бесконечности (или любое гарантированное наибольшее значение числа) в C?
Как бы вы установили переменную в наибольшее возможное число в C?
Ответ 1
#include <limits.h>
int x = INT_MAX;
EDIT: ответьте до того, как выяснилось, уточнил, я просто догадывался, какой тип они хотели.
Ответ 2
Существует файл под названием limits.h(по крайней мере, на Linux есть), который содержит такое определение, например.
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
Ответ 3
Напротив, самый простой способ получить наибольшее значение для целочисленного типа без знака - это преобразовать (-1) в этот тип. Стандарт (§6.2.5/9) требует, чтобы беззнаковая математика выполнялась по модулю номер один больше наибольшего значения, которое может быть представлено, поэтому для любого беззнакового типа T
выражение ((T)-1)
обязательно будет самым большим значение возможно в этом типе.
Ответ 4
Другой портативный способ получить максимальное значение целого числа:
Целое число без знака
unsigned int uMax = (unsigned int)~0;
Целое число со знаком
signed int iMax = (unsigned int)~0 >> 1;
объяснение
-
~0
→ установка всех битов в один -
>> 1
→ стирание знака, сдвигая все биты вправо на одну позицию -
(unsigned int)
приведение типов к unsigned int после инверсии битов вместо использования~0U
, потому что C не имеет суффикса для коротких литералов char (все меньше, чем int в общем)
Таким образом, для максимально возможного значения char
- просто измените приведение типа формулы на unsigned char и т.д.
Бонус - минимальное значение подписанного int
Просто просто инвертируйте все биты еще раз в выражении max со знаком int:
signed int iMin = ~((unsigned int)~0 >> 1);
Это устанавливает первый бит знака в один, а остальные биты в ноль
Ответ 5
Основываясь на ваших комментариях, вы хотите unsigned int
(хотя вы говорите "беззнаковое целое число", поэтому, возможно, вам нужно интегральное значение, не обязательно unsigned int
).
В C для беззнакового целочисленного типа значение -1
при преобразовании в этот тип гарантируется как наибольшее значение этого типа:
size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;
назначьте значения SIZE_MAX
, UINT_MAX
и ULONG_MAX
для переменных соответственно. В общем, вы должны включить limits.h
и использовать соответствующий макрос, но хорошо знать правило выше. Кроме того, SIZE_MAX
не находится на C89, поэтому size_t size_max = -1;
будет работать как на C89, так и на C99.
Обратите внимание, что поведение переполнения гарантируется только для неподписанных типов интегралов.
Ответ 6
Так как на этом вопросе есть тег С++, я предлагаю numeric_limits:
#include <limits>
unsigned x = std::numeric_limits<unsigned>::max();
Ответ 7
Обычно это делается с помощью 1.0/0.0
, но вы можете получить предупреждение компиляции. Я не знаю других переносных способов сделать это на C89, но C99 имеет макрос FP_INFINITE
в math.h
.
EDIT: По-видимому, Сэм на самом деле не хотел бесконечности, но были указаны целые пределы, которые можно найти в limits.h
, как и другие.
Ответ 8
Обычно я использую макросы * _MAX
, найденные в limits.h
INT_MAX
для целых чисел и т.д. Они всегда будут правильно заданы для типа переменной. Даже типы с явным размером, такие как uint32, будут иметь соответствующие записи в этом файле заголовка.
Это имеет значение как наибольшее возможное значение, которое может иметь переменная этого типа.
Для целого числа без знака, которое вы задали в своем вопросе, вы должны использовать UINT_MAX
Ответ 9
Я думаю, вы можете проверить эту ссылку:
http://www.gnu.org/s/libc/manual/html_node/Infinity-and-NaN.html
Я сделал это, и он отлично работает на gcc 4.4.1
#include "math.h"
int main(int argc, char**argv)
{
int x = INFINITY;
return 0;
}
Ответ 10
- Во-первых, включите заголовочный файл с именем math.h
- Теперь приравниваем INT_MAX к целому числу, значение которого вы хотите установить максимум. ПРИМЕР:
#include<math.h>//the header file which need to be included//int a=INT_MAX;//Suppose "a" be that integer whose value you want largest//
#include<math.h>//the header file which need to be included//int a=INT_MAX;//Suppose "a" be that integer whose value you want largest//