2014-12-27 26 views
7
#include <iostream> 

#include <cstdint> 
#include <cstdio> 

using namespace std; 

int main() 
{ 
    uint16_t ii; 
    std::cin >> ii;              
    printf("%d\n", ii); 
} 

quando do ingresso 5 l'uscita è anche 5. Ma quando cambio il tipo di ii a uint8_t, non ottengo 5 ma 53 che sembra essere il valore ASCII di 5. È previsto?comportamento gcc strano con unsigned int

+0

Ma, ho usato printf non cout right. Non è il problema con cin? Anche la stampa – gyro

+0

è problematica, perché lanci a 'uint8_t'? –

+0

@KarolyHorvath giusto..il modo in cui stampo è anche sbagliato. Ma in qualche modo stampa il giusto valore .. Non è sicuro del perché, per quanto sia – gyro

risposta

11

uint8_t è consentito (ma non obbligatorio) come typedef per char (se risulta non firmato) o unsigned char. E l'inserimento di quelli è fatto come caratteri non numeri. Quindi questo è un comportamento valido ma non richiesto.

+1

So che è quello che intendevi, ma per essere chiari: alcune implementazioni rendono 'char' firmato, altri lo rendono non firmato. Nelle implementazioni in cui è stato firmato, 'uint8_t' non può essere un typedef per' char'. Nelle implementazioni in cui non è firmato, è consentito. – hvd

+0

'uint16_t' potrebbe anche essere' char unsigned ', naturalmente, anche se è meno probabile incontrarlo nella pratica. –

+0

@hvd Grazie. Chiarito. –