2012-10-10 52 views
6

Quiero imprimir el valor máximo del entero sin signo que es de 4 bytes.¿Cómo puedo imprimir el valor máximo de un entero sin signo?

#include "stdafx.h" 
#include "conio.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    unsigned int x = 0xffffffff; 
    printf("%d\n",x); 
    x=~x; 
    printf("%d",x); 
    getch(); 
    return 0; 
} 

Pero obtengo una salida como -1 y 0. ¿Cómo puedo imprimir x = 4294967295?

+0

utilice la biblioteca 'limits.h' (no estoy seguro, pero podría ser una biblioteca de C++) – elyashiv

Respuesta

13

Use %u como la cadena de formato printf.

3

Debe usar <stdint.h> y <limits.h> luego INT_MAX o el límite que sea apropiado para su tipo.

4

Uso %u como la cadena de formato para imprimir unsigned int, %lu para unsigned long y %hu para unsigned short.

11

El formato %d trata a su argumento como una firmaronint. Use %u en su lugar.

Pero una mejor manera de obtener el valor máximo de tipo unsigned int es utilizar la macro UINT_MAX. Necesitará

#include <limits.h> 

para que sea visible.

También puede calcular el valor máximo de un tipo sin firmar convirtiendo el valor -1 en el tipo.

#include <limits.h> 
#include <stdio.h> 
int main(void) { 
    unsigned int max = -1; 
    printf("UINT_MAX = %u = 0x%x\n", UINT_MAX, UINT_MAX); 
    printf("max  = %u = 0x%x\n", max, max); 
    return 0; 
} 

Tenga en cuenta que la UINT_MAX no es necesariamente 0xffffffff. Es si unsigned int pasa a ser de 32 bits, pero podría ser tan pequeño como 16 bits; son 64 bits en algunos sistemas.

+1

' ULONG_MAX' es para 'unsigned long', no' unsigned int'. – nneonneo

+0

@nneonneo: ¡Reparado, gracias! –

5

Existe la macro definida en <limits.h>: UINT_MAX.

1

printf ("% u", ~ 0); // llena todos los bits en un int sin firmar con 1 e imprime el valor.

+0

Este es un comportamiento indefinido, '% u' es para' unsigned int', sin embargo '~ 0' es un' signed int' –

Cuestiones relacionadas