2016-08-13 6 views
-3

dies ist ein Teil eines C-Programms, das ich nicht verstand:Konvertierung von int unsigned short

unsigned short twittlen; 
int x; 

x = atoi(argv[1]); 
twittlen = x; 

if(twittlen >= 64) { 
    printf("Nope , You don't know about Integer"); 
    return -1; 
} 

if (x >= 64) 
    printf("you got it "); 

Mein Problem ist, wie ein int zu finden, die größer als 64 ist, aber wenn es um unsigned Umwandlung Kurz wird es weniger als 64 sein! Ich habe viel über Limit dieser Arten von ganzen Zahlen sogar auf stackoverflow geschaut, aber ich fand die Antwort darüber nicht! Vielen Dank im Voraus :)

+1

Es gibt nicht * das * viele ganze Zahlen in einem int, warum nicht eine Schleife, um sie alle zu versuchen, bis Sie einen finden? – stijn

+2

Beachten Sie, dass es eine gute Idee ist, Nachrichten, die auf dem Terminal gedruckt werden, mit einem Zeilenumbruch zu beenden. Es hilft sicherzustellen, dass die Informationen rechtzeitig angezeigt werden. Die Ausgabe wird möglicherweise erst angezeigt, wenn eine neue Zeile _is_ gedruckt wird, was viel später als erwartet sein kann. –

Antwort

4

Wenn Sie vergeben einen int Wert auf eine unsigned short, Abschneiden auftreten.

Angenommen int ist 4 Bytes und short 2 ist, man einfach das Programm mit einem Wert zur Verfügung stellen muß mehr als 64, deren unteren zwei Bytes weniger als 64

Der maximale unsigned 16-Bit-Wert ist 65535:

0x0000FFFF 

Also, wenn Sie die Nummer 65536 eingeben:

0x00010000 

wenn abgeschnitten nur zwei Bytes:

0x0000 

Ist Null.

Verwandte Themen