È un valore intero di -5
? O è 5
un letterale e -5
è un'espressione con unario meno prendendo un letterale come argomento? La domanda è sorta quando mi chiedevo come codificare i più piccoli valori interi con segno.-5 è un intero letterale?
risposta
È un meno unario seguito da 5 come un intero letterale. Sì, questo rende alquanto difficile rappresentare il più piccolo numero intero possibile in complemento a due.
@Jerry Coffin: Se i tipi 'long' e 'unsigned long' sono a 32 bit, un compilatore conforme agli standard considererebbe -2147483648 come unsigned long uguale a 2147483648, un errore o comportamento non definito? – supercat
@supercat: in C++ non è definito, ma in C++ con le dimensioni specificate, '2147483648' non è definito (2.13.1/2) - è necessario * fornire un suffisso' 2147483648u' o ottenere aiuto dall'implementazione. Spero che il compilatore ti faccia un favore e consideri '2147483648' come un unsigned long, o forse un' long long' se supportato, o un errore se tutto il resto fallisce: ma non è necessario. In C99 (sempre con queste dimensioni), '-2147483648' è un negativo' long long'. Penso che in C89 sia un 'unsigned long', che non provoca alcun fine di intrattenimento durante la migrazione da uno all'altro. –
In C99 con 'int' a 32 bit,' -2147483648' ha tipo 'unsigned int' e il suo valore è 2147483648. Non c'è motivo per cui diventerebbe 'long long' perché 2147483648 si adatta a' unsigned int', e quindi l'operatore di negazione unario viene applicato ad esso. –
Come Jerry Coffin said, il segno meno non fa parte del letterale. Quanto a come risolvere la tua domanda finale,
mi chiedevo come hardcode più piccolo intero firmato Valori
Questo è ciò che INT_MIN
(e simili in limits.h
o stdint.h
o ovunque) è per.
Se si guarda a come INT_MIN
è definito, sarà probabilmente un aspetto simile (-2147483647 - 1)
per aggirare il problema sollevato dalla domanda.
Grazie. L'ho già fatto. In realtà non sto incontrando alcun problema. Mi stavo solo chiedendo :)) –
@Armen: capito. Credo che dovrei dire "il problema sollevato dalla domanda" allora. –
Puoi dirmi che tipo ha '-1' e che tipo ha' 1' ha ..? So che questa è una domanda di base, ma sto avendo una confusione, riguardo a questo. –
- 1. 5 * 5 è letterale o solo un'espressione?
- 2. Il letterale intero è un oggetto in Python?
- 3. Perché un valore letterale intero è seguito da un punto un valore letterale numerico valido in JavaScript?
- 4. Cosa significa "L" alla fine di un intero letterale?
- 5. Perché è ambiguo chiamare overload ambig (long) e ambig (unsigned long) con un intero letterale?
- 6. Aritmetica di interi in Java con char e intero letterale
- 7. VB2010 Come capire se un numero è un intero intero
- 8. Come posso generare un intero da un valore letterale stringa in fase di compilazione?
- 9. Perché il typecasting di un intero letterale a un valore del puntatore produce un'espressione non const?
- 10. Come posso creare un valore letterale definito dall'utente per un tipo intero con segno?
- 11. Dove è definito "id" letterale?
- 12. Struct è non letterale tipo
- 13. Come verificare se un doppio è un numero intero
- 14. Il check in di un intero è divisibile per un altro intero (Swift)
- 15. Un letterale "*" in reStructuredText
- 16. carattere letterale in C: è un int o un carattere?
- 17. Verifica se un intero è compreso nell'intervallo
- 18. È richiesto un numero intero? open()
- 19. Verifica se BigDecimal è un valore intero
- 20. laravel 5 Migrazione, valore di default non valido quando intero
- 21. Come definire un Qreale letterale
- 22. long long è 8 byte, ma ottengo un overflow intero?
- 23. Perché '\ 117' è un carattere letterale valido in Java?
- 24. Perché un valore letterale stringa vuoto è considerato true?
- 25. Un NSString letterale è autoreleased o deve essere rilasciato?
- 26. Perché `std :: initializer_list` non è definito come un tipo letterale?
- 27. Il contenuto letterale non è consentito all'interno di un UserControl
- 28. Perché è consentito un valore letterale wchar_t vuoto?
- 29. È possibile (legale) assegnare un'unione anonima in un letterale composto?
- 30. intero rotondo al più vicino multiplo di 5 in PHP
E INT_MIN da per "numero intero con segno più piccolo"? –
Arun
Oppure, dato che è codificato in C++, che ne dite di 'std :: numeric_limits :: min()'? –
Praetorian
Ho guardato in climi. #define INT_MIN (-2147483647 - 1) Interessante :) Grazie –