En limits.h
, hay #defines para INT_MAX
y INT_MIN
(y SHRT_ * y LONG_ * y así sucesivamente), pero solo UINT_MAX
.¿Qué es un valor portátil para UINT_MIN?
¿Debo definir yo mismo UINT_MIN
? ¿Es 0
(cero positivo) un valor portátil?
En limits.h
, hay #defines para INT_MAX
y INT_MIN
(y SHRT_ * y LONG_ * y así sucesivamente), pero solo UINT_MAX
.¿Qué es un valor portátil para UINT_MIN?
¿Debo definir yo mismo UINT_MIN
? ¿Es 0
(cero positivo) un valor portátil?
Si quiere ser "seguro" puede usar 0U
, por lo que si lo usa en una expresión tendrá las promociones correctas al unsigned
.
Entonces, ¿debería '#definir UINT_MIN + 0U' en' limits.h'? –
Pensando en ello, tal vez no sea una buena idea tener un archivo que tenga el mismo nombre que un archivo estándar o perder el tiempo con el último. Lo pondría en otro lugar. Si quiere tener un '+' al '0U' (¿por qué?) Debería tener el entero entre paréntesis' (+ 0U) 'ya que de lo contrario podría tener efectos no deseados cuando el' + 'podría interpretarse como una suma. –
No necesita paréntesis. Incluso en '1 + UINT_MIN', se expandiría a' 1+ + 0U', que es una expresión correcta. La expansión de macro ocurre al nivel de token, y no pega los dos más juntos. – MSalters
Es un entero sin signo -, por definición, su valor más pequeño posible es 0. Si desea alguna justificación, además de sentido común, el standard dice:
6.2.6.2 Los tipos enteros
- Para tipos de enteros sin signo distintos de
unsigned char
, los bits de la representación del objeto se dividirán en dos grupos: bits de valor y de relleno (no es necesario que haya ninguno de estos últimos). Si hay N bits de valor, cada bit representará una potencia diferente de 2 entre 1 y 2^(N -1), de modo que los objetos de ese tipo sean capaces de representar valores de 0 a 2^(N -1) usando una representación binaria pura; esto se conocerá como la representación del valor. Los valores de los bits de relleno no están especificados.
adora el estándar. especialmente cuando está cotizado. –
Esto no responde mi pregunta. –
@Ariel, ¿cómo no responde su pregunta? El valor mínimo para un tipo sin signo está definido por el estándar como 0. –
Usted podría utilizar std::numeric_limits<unsigned int>::min()
.
Esto no funcionará en C/C++. –
Esto funcionará en C++, y esto no funcionará en C. ¿Qué es C/C++? –
Nuestro árbol fuente contiene C y C++, por lo que debe funcionar con ambos. Es por eso que etiqueté la pregunta con ambos. –
+1 por preocuparse lo suficiente acerca de la portabilidad y corrección para preguntar. –
Debería dar un -1 por querer sin sentido eliminar el "número mágico" 0. Pero bueno. –
"cero positivo"? – jamesdlin