2010-08-05 19 views

Respuesta

15

Llanura int es la misma que signed es lo mismo que signed int

+0

Algunos (¿todos?) Compiladores tienen un interruptor para cambiar el valor predeterminado a sin firmar. En MSVC, es/J. –

+1

FYI El compilador CCS para controladores Microchip PIC no tiene firma por defecto. Argh! – kenny

+9

El modificador del compilador/J afecta a char, no a int. "char" puede o no estar firmado. "char", "signed char" y "unsigned char" son siempre tipos distintos, independientemente de si se ha firmado o no "char". –

2

int s son firmados por defecto.

12

C++ estándar 3.9.1/2:

Hay cuatro tipos enteros con signo: “long int” “signed char”, “short int”, “int”, y < ...>

C++ estándar 3.9.1/3:

Para cada uno de los tipos de enteros con signo, hay correo Xists correspondiente (pero diferente) sin signo de tipo entero: “unsigned char”, “unsigned short int”, “unsigned int”, y “unsigned long int ,” < ...>

Por lo tanto, sizeof(int) es igual a sizeof(unsigned). Pero boost::is_same< int, unsigned >::value es falso.

+1

+1 por citar Norma. – Cumbayah

1

signed int es lo mismo que int y especifica un valor entero que puede tener valores positivos y negativos.

unsigned int por el contrario, solo pueden tener valores positivos, por lo que el mayor valor positivo es mucho mayor que el de signed int.

+0

En realidad, el * rango * de valores es exactamente del mismo tamaño, simplemente se desplazó para que el valor mínimo sea 0. –

+0

Tiene razón, esa fue una mala elección de palabras. Corregido;) –

3

ints están firmados por defecto, al igual que longs.

Por lo tanto, int, signed y signed int son lo mismo.

Similarmente long y signed long son lo mismo.

chars por el contrario, no tienen un valor predeterminado. Las implementaciones pueden considerarlos como firmados o no (muchos tienen un interruptor de línea de comando para elegir). char, signed char y unsigned char se consideran tres tipos distintos de resolución de sobrecarga, instancias de plantilla y otros lugares.

+0

La última oración es muy restringida. No es solo resolución de sobrecarga, está en todas partes. P.ej. también como argumentos de plantilla.Así 'std :: vector ' es del mismo tipo que 'std :: vector ', pero 'std :: vector ' no es ** el mismo tipo que 'std :: vector ' – MSalters

+0

@MSalters: Buen punto, actualizado. –