In base a this, i valori letterali interi senza suffisso di tipo sono sempre int
s. Tuttavia, sia gcc che clang interpretano 0xffffffff
(o qualsiasi letterale che imposta esplicitamente il bit di segno diverso dall'utilizzo di -
) come non firmato. Che è corretto? (Secondo this compilatori sono)È il letterale 0xffffffff int o non firmato in C++
risposta
Per Paragrafo 2.14.2/2 del C++ 11 standard,
Il tipo di un intero letterale è il primo della lista corrispondente nella tabella 6 il cui valore può essere rappresentato da .
Tabella 6 rapporti che per le costanti esadecimali, il tipo dovrebbe essere:
int
; oppure (se non adatto)unsigned int
; oppure (se non adatto)long int
; oppure (se non adatto)unsigned long int
; o (se non si adatta)long long int
; oppureunsigned long long int
.
Assumendo che l'attuazione è a 32 bit int
, dal momento che 0xffffffff
non rientra in un int
, il tipo dovrebbe essere unsigned int
. Per un'implementazione con un int
a 64 bit, il tipo sarà int
.
avviso, che se avessi scritto la stessa letterale come decimali costante, invece, il tipo avrebbe potuto essere solo:
int
; oppure (se non adatto)long int
; o (se non si adatta)long long int
.
Interessante. Vuoi collegare la citazione alla sua pagina web online, se è possibile? – deepmax
@MM .: Questo è lo standard C++ 11 (sto usando il Draft 3485, che è leggermente più recente dello Standard ufficiale). The Draft può essere scaricato gratuitamente da [qui] (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3485.pdf). Lo standard ufficiale è pagato. –
- 1. carattere letterale in C: è un int o un carattere?
- 2. Il carattere non firmato c = 255 è "11111111" o no?
- 3. È un int uguale a quello senza segno o firmato?
- 4. int Perché non firmato conteneva numero negativo
- 5. Byte Java non firmato [2] su int?
- 6. In che modo il computer distingue un intero è firmato o non firmato?
- 7. typecasting a non firmato in C
- 8. Rileva overflow int. Firmato in Go
- 9. Letterale "o" nel programma C++?
- 10. Il cast di C++ non è firmato per la firma
- 11. Un assegnamento letterale a int in C++ genera un'eccezione?
- 12. C89: disaccordo firmato/non firmato
- 13. C++ firmato e unsigned int vs lunga velocità lungo
- 14. Conversione firmato a non firmato a Swift
- 15. C - Conversione long int a stringa esadecimale firmato
- 16. Qual è il tipo di stringa letterale in C++?
- 17. La vera differenza tra "int" e "unsigned int"
- 18. C# Enum o costanti int
- 19. C++: mancata corrispondenza firmato/non firmato quando si utilizzano solo tipi non firmati
- 20. Char o Int per il valore booleano in C?
- 21. firmato come predefinito in C
- 22. ctype.h richiede ancora il char non firmato?
- 23. Python: letterale non valido per int() con base 10: '808.666666666667'
- 24. Struct è non letterale tipo
- 25. Django: letterale non valido per int() con base 10
- 26. tinyint non firmato in php?
- 27. È legale questo C/C++? `Int * p = (int []) {1,2,3};`
- 28. Quando int non è un int (intX_t)
- 29. 5 * 5 è letterale o solo un'espressione?
- 30. Un buffer di byte dovrebbe essere firmato o un buffer di caratteri non firmato?
Non so, ma sono interessato a sapere perché è importante. –
@roger_rowland non lo fa, presumibilmente, ma clang mi avverte di una conversione da unsigned a signed, che è fastidioso e che non ho capito – Walter
Suppongo che il punto sia 0xffffffff = 4294967295 sono numeri positivi e non si adattano in un Int. –