Подтвердить что ты не робот

Как бы вы установили переменную в наибольшее возможное число в C?

Как бы вы установили переменную равной бесконечности (или любое гарантированное наибольшее значение числа) в C?

4b9b3361

Ответ 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

Ответ 10

  1. Во-первых, включите заголовочный файл с именем math.h
  2. Теперь приравниваем 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//