A palavra-chave sem sinal padrão para um tipo de dados específico em C ++? Estou tentando escrever uma função para uma classe para o protótipo:
unsigned Rotate(unsigned object, int count)
Mas eu realmente não entendo o que unsigned
significa. Não deveria ser assim unsigned int
ou algo assim?
Tipos inteiros:
short -> signed short signed short unsigned short int -> signed int signed int unsigned int signed -> signed int unsigned -> unsigned int long -> signed long signed long unsigned long
Cuidado com o char:
char (is signed or unsigned depending on the implmentation) signed char unsigned char
fonte
Sim, assinado e não assinado também podem ser usados como especificadores de tipo autônomo
Os tipos de dados inteiros char, short, long e int podem ser assinados ou não, dependendo do intervalo de números necessário para ser representado. Os tipos com sinal podem representar valores positivos e negativos, enquanto os tipos sem sinal só podem representar valores positivos (e zero).
Um inteiro sem sinal contendo n bits pode ter um valor entre 0 e 2 n - 1 (que é 2 n valores diferentes).
No entanto, assinado e não assinado também podem ser usados como especificadores de tipo autônomo, significando o mesmo que int assinado e não assinado, respectivamente. As duas declarações a seguir são equivalentes:
unsigned NextYear; unsigned int NextYear;
fonte
short
- chave elong
também são modificadores de tipo . Se você escrevershort s
, isso realmente significashort int s
, assim comounsigned u
realmente significaunsigned int u
. (eunsigned short
significaunsigned short int
)Você pode ler sobre a palavra-chave unsigned na Referência C ++ .
Existem dois tipos diferentes neste assunto, assinados e não assinados. O padrão para inteiros é assinado, o que significa que eles podem ter valores negativos.
Em um sistema de 32 bits, um número inteiro é de 32 bits, o que significa que pode conter um valor de ~ 4 bilhões.
E quando for assinado, isso significa que você precisa dividi-lo, deixando -2 bilhões a +2 bilhões.
Quando não tem sinal, entretanto, o valor não pode conter nenhum número negativo, portanto, para inteiros, isso significaria de 0 a +4 bilhões.
Há um pouco mais de informações sobre isso na Wikipedia .
fonte
Sim, isso significa
unsigned int
. Costumava ser que, se você não especificasse um tipo de dados em C, haveria muitos lugares onde apenas assumiaint
. Esta foi a tentativa, por exemplo, de tipos de retorno de função.Esta verruga foi quase totalmente erradicada, mas você está encontrando seus últimos vestígios aqui. IMHO, o código deve ser corrigido
unsigned int
para evitar o tipo de confusão que você está enfrentando.fonte