Parola chiave senza segno in C ++


87

La parola chiave non firmata utilizza per impostazione predefinita un tipo di dati specifico in C ++? Sto cercando di scrivere una funzione per una classe per il prototipo:

unsigned Rotate(unsigned object, int count)

Ma non capisco davvero cosa unsignedsignifica. Non dovrebbe essere come unsigned into qualcosa del genere?

Risposte:


92

Dal link sopra:

Molti di questi tipi possono essere modificati utilizzando le parole chiave signed, unsigned, short e long. Quando uno di questi modificatori di tipo viene utilizzato da solo, viene assunto un tipo di dati int

Ciò significa che puoi presumere che l'autore stia usando gli int.


È consentito a C99 e MISRA di farlo?
nowox

42

Tipi interi:

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

Fai attenzione al char:

char  (is signed or unsigned depending on the implmentation)
signed char
unsigned char

1
@Firas: So che è in C.Implicit int non è né una parte di ISO C99 né una parte di ISO C ++
Prasoon Saurav

4
L'uso di "unsigned" (da solo) per dichiarare il tipo "unsigned int" è standard in C ++. Nello standard corrente: 7.1.5.2 [dcl.simple.type] ha una tabella che identifica ogni dichiarazione di tipo per il tipo effettivo utilizzato. Quella tabella ha una corrispondenza dalla dichiarazione "unsigned" al tipo "unsigned int".
David Rodríguez - dribeas

2
Si noti che char ha un comportamento identico a signed char o unsigned char, ma rimane un tipo separato indipendentemente da cosa.

@Firas: vedere la sezione: 3.9.1 Tipi fondamentali. Paragrah 2: <quote> Esistono cinque tipi di interi con segno standard: "signed char", "short int", "int", "long int" e "long long int". </quote>
Martin York

21

Per impostazione predefinita, la parola chiave senza segno è un tipo di dati in C ++

Sì, firmato e non firmato possono essere utilizzati anche come identificatori di tipo autonomi

I tipi di dati interi char, short, long e int possono essere con o senza segno a seconda dell'intervallo di numeri da rappresentare. I tipi con segno possono rappresentare valori sia positivi che negativi, mentre i tipi senza segno possono rappresentare solo valori positivi (e zero).

Un numero intero senza segno contenente n bit può avere un valore compreso tra 0 e 2 n - 1 (ovvero 2 n valori diversi).

Tuttavia, signed e unsigned possono anche essere usati come specificatori di tipo standalone, il che significa rispettivamente lo stesso di signed int e unsigned int. Le due dichiarazioni seguenti sono equivalenti:

unsigned NextYear;
unsigned int NextYear;

3
Non è un "sì", allora? Il valore predefinito è int, se usato senza un tipo?
rilassarsi il

Grazie! L'inglese non è la mia prima lingua e sono rimasto sconcertato dal significato del tipo di dati non firmato. Di chi è la firma? Non mi è mai venuto in mente che potesse essere dal segno del nome ...: D
user74200

Le parole chiave shorte longsono anche modificatori di tipo . Se scrivi short s, significa in realtà short int s, proprio come unsigned usignifica in realtà unsigned int u. (e unsigned shortsignifica unsigned short int)
Ben Voigt

8

Puoi leggere informazioni sulla parola chiave unsigned nel Riferimento C ++ .

Esistono due diversi tipi in questa materia, firmato e non firmato. L'impostazione predefinita per i numeri interi è con segno, il che significa che possono avere valori negativi.

Su un sistema a 32 bit un numero intero è 32 bit, il che significa che può contenere un valore di ~ 4 miliardi.

E quando è firmato, significa che devi dividerlo, lasciando -2 miliardi a +2 miliardi.

Quando è senza segno, tuttavia, il valore non può contenere numeri negativi, quindi per interi questo significherebbe da 0 a +4 miliardi.

Ci sono un po 'più di informazioni su questo argomento Wikipedia .


2
Mi piace cantare per la maggior parte delle cose da solo. Buonissimo carbonio e carmelizzazione!
Omnifarious

1
Che ne dici di modificare gli errori di battitura? ... ecco a cosa serve il pulsante "modifica"!
Filip Ekberg

3

Sì, significa unsigned int. In passato, se non si specificava un tipo di dati in C, c'erano molti posti in cui si presumeva int. Questo è stato provato, ad esempio, con i tipi restituiti dalle funzioni.

Questa verruca è stata per lo più estirpata, ma qui stai incontrando le sue ultime vestigia. IMHO, il codice dovrebbe essere corretto per dire unsigned intper evitare solo il tipo di confusione che stai vivendo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.