todas - ¿Cómo establecerías una variable al mayor número posible en C?
tipos de variables en c++ y su significado (9)
¿Cómo establecerías una variable igual a infinito (o cualquier valor numérico garantizado mayor) en C?
Otra forma portátil de obtener el valor máximo del entero sin signo es establecer todos los bits en uno:
unsigned int uMax = ~0;
Como hay una etiqueta C ++ en esta pregunta, sugeriré numeric_limits:
#include <limits>
unsigned x = std::numeric_limits<unsigned>::max();
Con mucho, el método más simple para obtener el valor más grande para un tipo de entero sin signo es lanzar (-1) a ese tipo. El estándar (§6.2.5 / 9) requiere que las matemáticas sin signo se lleven a cabo en un módulo un número uno mayor que el valor más grande que se puede representar, de modo que para cualquier tipo sin signo T
, la expresión ((T)-1)
necesariamente será el mayor valor posible en ese tipo.
En función de sus comentarios, quiere un unsigned int
(aunque diga "entero sin signo", así que tal vez quiera un valor integral, no necesariamente un unsigned int
).
En C, para el tipo integral sin signo, el valor -1
, cuando se convierte a ese tipo, se garantiza que es el valor más grande de ese tipo:
size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;
asigne los valores SIZE_MAX
, UINT_MAX
y ULONG_MAX
a las variables respectivamente. En general, debe incluir limits.h
y usar la macro apropiada, pero es bueno saber la regla anterior. Además, SIZE_MAX
no está en C89, por lo que size_t size_max = -1;
funcionará tanto en C89 como en C99.
Tenga en cuenta que el comportamiento de desbordamiento solo está garantizado para los tipos integrales sin signo.
Generalmente uso las macros * _MAX
encontradas en los INT_MAX
para enteros, etc. Estas siempre se establecerán correctamente para el tipo de variable. Incluso los tipos de tamaño explícito como uint32 tendrán las entradas correspondientes en este archivo de encabezado.
Esto tiene la virtud de ser el mayor valor posible que una variable de ese tipo puede contener.
Para un entero sin signo como lo solicitó en su pregunta, usaría UINT_MAX
Hay un archivo llamado limits.h (al menos en Linux), que contiene este tipo de definición, por ejemplo
/* 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
Normalmente esto se hace por 1.0/0.0
, pero puede obtener una advertencia de compilación sobre eso. No conozco otras formas portátiles de hacerlo en C89, pero C99 tiene macro FP_INFINITE
en math.h
EDITAR: Aparentemente, Sam no quería infinito, sino límites enteros, que se pueden encontrar en los limits.h
Como otros han dicho.
#include <limits.h>
int x = INT_MAX;
EDIT: respondido antes de que el interrogador aclarara, solo estaba adivinando de qué tipo querían.
Supongo que es mejor que revises este enlace:
http://www.gnu.org/s/libc/manual/html_node/Infinity-and-NaN.html
Hice esto y funciona bien en gcc 4.4.1
#include "math.h"
int main(int argc, char**argv)
{
int x = INFINITY;
return 0;
}