ios - uint8_t - variable uint32_t
¿Cómo configuro un UInt32 a su valor máximo? (6)
¿Cuál es el valor máximo para un UInt32?
¿Hay alguna forma en que pueda usar el operador sizeof para obtener el valor máximo (ya que no está firmado)? Entonces no termino con #defines o números mágicos en mi código.
4.294.967.295 es el valor máximo o en hexadecimal 0xFFFFFFFF
El valor máximo para UInt32 es 0xFFFFFFFF
(o 4294967295 en decimal).
sizeof(UInt32)
no devolvería el valor máximo; devolvería 4, el tamaño en bytes de un entero sin signo de 32 bits.
Hay una macro UINT32_MAX
definida en stdint.h
que puede usar
#include <stdint.h>
uint32_t max = UINT32_MAX;
Más sobre el encabezado relevante <stdint.h>
:
http://pubs.opengroup.org/onlinepubs/009695299/basedefs/stdint.h.html
La forma portátil:
std::numeric_limits<uint32_t>::max()
Solo establece el máximo usando notación hexadecimal estándar y luego compáralo con lo que necesites. 32 bits es 8 bytes hexadecimales, por lo que sería así:
let myMax: UInt32 = 0xFFFFFFFF
if myOtherNumber > myMax {
// resolve problem
}
Una alternativa para cualquier no firmado en C o C ++ es:
anUnsigned = -1;
Esto es útil, ya que funciona para todos ellos, por lo que si cambia de unsigned int
unsigned long
a unsigned long
, no necesita revisar su código. También verás esto usado en un montón de código de manipulación de bits:
anUnsigned |= -(aBoolOrConditionThatWhenTrueCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!aValueThatWhenZeroCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!!aValueThatWhenNonZeroCausesAnUnsignedToBeSetToAll1s)
La desventaja es que se ve extraño, ¡asignando un número negativo a un sin signo!