uint8_t - unsigned int max c++
Perché il tipo intero int64_t non può contenere questo valore legale? (2)
Ben ha già spiegato il motivo, ecco altre due possibili soluzioni.
Prova questo
int64_t a = INT64_MIN;
o questo
int64_t a = std::numeric_limits<int64_t>::min();
Questa domanda ha già una risposta qui:
Sto cercando di scrivere un caso di prova per un caso d'angolo.
Per input di tipo
int64_t
, la seguente riga non verrà compilata:
int64_t a = -9223372036854775808LL;
L'errore / avviso è:
error: integer constant is so large that it is unsigned [-Werror]
Pensavo che il numero fosse fuori portata, quindi ho provato:
std::cout << std::numeric_limits<int64_t>::min() << std::endl;
Emette esattamente lo stesso numero !!! Quindi la costante è all'interno dell'intervallo.
Come posso correggere questo errore?
Puoi scrivere
int64_t a = -1 - 9223372036854775807LL;
Il problema è che il
-
non fa parte del letterale, è meno unario.
Quindi il compilatore prima vede
9223372036854775808LL
(fuori portata per
int64_t
firmato) e poi trova il negativo di questo.
Applicando il meno binario, possiamo usare due letterali che sono ciascuno nel range.