2010-10-12 12 views
10

È 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?

+4

E INT_MIN da per "numero intero con segno più piccolo"? – Arun

+4

Oppure, dato che è codificato in C++, che ne dite di 'std :: numeric_limits :: min()'? – Praetorian

+0

Ho guardato in climi. #define INT_MIN (-2147483647 - 1) Interessante :) Grazie –

risposta

9

È 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.

+0

@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

+0

@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. –

+0

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. –

3

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.

+0

Grazie. L'ho già fatto. In realtà non sto incontrando alcun problema. Mi stavo solo chiedendo :)) –

+0

@Armen: capito. Credo che dovrei dire "il problema sollevato dalla domanda" allora. –

+0

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. –

Problemi correlati