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

Как бы вы поделили #include <пределы.h> int x = INT_MAX ; переменная равная бесконечности (или любое гарантированное наибольшее значение числа) в C?

c,integer,limits,

20

Ответов: 10


30 ов принято
/* 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

EDIT: ответил, прежде чем выяснится, уточнил, я просто догадывался, какого типа они хотят.


26

Существует файл под названием T (по крайней мере, на Linux), который имеет такое определение, например

((T)-1)

9

Самый простой способ получить наибольшее значение для целочисленного типа без знака - это преобразовать (unsigned int) в этот тип. В стандарте (A§.6.2.5 / 9) требуется, чтобы математика без знака выполнялась по модулю номер один больше, чем наибольшее значение, которое может быть представлено, поэтому для любого беззнакового типа Tвыражение -1обязательно будет самым большим значением, возможным в этом типе ,


6

Основываясь на ваших комментариях, вы хотите (хотя вы скажете «беззнаковое целое число», так что, возможно, вам нужно интегральное значение, не обязательно an ).size_t size_max = -1; unsigned int uint_max = -1; unsigned long ulong_max = -1;unsigned int

В C для беззнакового целочисленного типа значение -1, преобразованное в этот тип, гарантируется как наибольшее значение этого типа:

SIZE_MAX

присвоить значения UINT_MAX, ULONG_MAXи limits.hк переменным соответственно. В общем, вы должны включить limits.hи использовать соответствующий макрос, но хорошо знать правило выше. Кроме того, SIZE_MAXнет в C89, поэтому он size_t size_max = -1;будет работать на C89, а также на C99.

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


6

Другой переносимый способ получить максимальное значение беззнакового целого - это установить все биты в единицу:

unsigned int uMax = ~0;
с, целое число, пределы,
Похожие вопросы