Palavra-chave sem sinal em C ++


87

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 unsignedsignifica. Não deveria ser assim unsigned intou algo assim?

Respostas:


92

No link acima:

Vários desses tipos podem ser modificados usando as palavras-chave assinado, não assinado, curto e longo. Quando um desses modificadores de tipo é usado sozinho, um tipo de dados de int é assumido

Isso significa que você pode assumir que o autor está usando ints.


É C99 e MISRA permitido fazer isso?
agora em

42

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

1
@Firas: Eu sei que está em C. O int implícito não faz parte do ISO C99 nem do ISO C ++
Prasoon Saurav

4
Usar 'unsigned' (por si só) para declarar o tipo 'unsigned int' é padrão em C ++. No padrão atual: 7.1.5.2 [dcl.simple.type] tem uma tabela que identifica cada declaração de tipo para o tipo real usado. Essa tabela tem uma correspondência de declaração 'unsigned' para 'unsigned int' tipo.
David Rodríguez - dribeas

2
Observe que char tem comportamento idêntico a sinal char ou unsigned char, mas permanece um tipo separado, não importa o quê.

@Firas: Veja a Seção: 3.9.1 Tipos fundamentais. Paragrah 2: <quote> Existem cinco tipos de inteiros com sinal padrão: “sinalizado”, “curto int”, “int”, “int longo” e “int longo longo”. </quote>
Martin York

21

A palavra-chave sem sinal padrão para um tipo de dados em C ++

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;

3
Não é um "sim", então? O padrão é int, se usado sem um tipo?
relaxe de

Obrigado! Inglês não é minha primeira língua e fiquei perplexo com o significado do tipo de dados sem sinal. De quem é a assinatura que contém? Nunca me ocorreu que poderia ser do signo nominal ...: D
user74200

As palavras short- chave e longtambém são modificadores de tipo . Se você escrever short s, isso realmente significa short int s, assim como unsigned urealmente significa unsigned int u. (e unsigned shortsignifica unsigned short int)
Ben Voigt

8

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 .


2
Eu gosto de cantar para a maioria das coisas. Carbono delicioso e carmelização!
Omnifário de

1
Que tal editar erros de digitação? ... é para isso que o botão "editar" existe!
Filip Ekberg de

3

Sim, isso significa unsigned int. Costumava ser que, se você não especificasse um tipo de dados em C, haveria muitos lugares onde apenas assumia int. 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 intpara evitar o tipo de confusão que você está enfrentando.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.