2016-05-13 11 views
-4

Ich bin mir nicht sicher, wie man Buchstaben hinter 255 automatisch entsperrt.C - Warum werden Zahlen zu einem Char bei 255 zurückgesetzt?

char f; 
f = 'k'; 
printf("%d\n", f); 

Ergebnisse in 107. Keine Überraschung.

f += 500; 
printf("%d\n", f); 

Ergebnisse in 95. Es scheint, dies wurde von 255.

printf("%c\n", 607); 

Ergebnisse in _ geteilt Modulo. Es gibt viel mehr Zeichen, die sich auch in die Tausende erstrecken. Wie kommt es, dass das Hinzufügen eines Wertes und das Ausführen eines Chars nach 255 eine Modulo-Operation erzwingt? Ich muss für eine Hash-Funktion über 255 hinausgehen.

+2

'sizeof (char)' ist ein Byte . Also könnte es nicht größer als 255 sein. Wenn du mehr brauchst, benutze 'wchar_t' oder seine Analoga. – Ari0nhh

+3

Ich ermutige Sie, das zu lesen: [Was jeder Programmierer absolut, positiv über Kodierungen und Zeichensätze wissen muss, um mit Text zu arbeiten] (http://kunststube.net/encoding/) – bolov

+4

@ Ari0nhh Es stimmt, dass 'sizeof (char) 'ist eins, es ist nicht unbedingt wahr, dass es * nicht größer als 255 sein kann.' sizeof (char) 'kann 1 sein, aber es könnte * aus 16 Bits bestehen. –

Antwort

3

Ein char ist ein Byte im Speicher. Sie können also keine Werte> 255 speichern, da sie nur 8 Bits haben (vorausgesetzt, auf Ihrer Plattform ist ein Zeichen als ein Byte mit 8 Bits definiert). Wenn der Wert mehr als 255 ist, läuft ein Überlauf.

Außerdem wissen Sie nicht, ob ein char unsigned (Werte können zwischen 0 und 255 sein) oder signiert (Werte können zwischen -128 und 127 sein).

Sie können einen anderen Typ als char verwenden, wenn Sie Werte> 255

+1

'char' sind * mindestens * ein Byte, aber Ihre Argumentation über Überlauf ist richtig – Garf365

+5

@ Garf365:' char 'ist garantiert 1 Byte, aber das ist nicht wahr: 'char' ist 8 Bits,' CHAR_BIT' ist die Anzahl der Bits in einem 'char': [Welche Plattformen haben etwas anderes als 8-Bit-Zeichen?] (http: // stackoverflow.com/q/2098149/1606345) –

+0

Tut mir leid, ich habe diese Antwort abgelehnt, weil es ziemlich falsch ist, auch mit Char Bits wie 8. –

0

Ein char Datentyp speichern wollen, ist ein 8-bit Feld mit einem maximalen Gesamtwert von 255. Sie benötigen einen 16-bit Wert verwenden, wenn Sie mit Zahlen arbeiten möchten, größer als 255

unsigned char einen Wertebereich von 0 to 255
signed char hat einen Wertebereich von -128 to 127

+1

Kann wer downvoted erklären, wo ich falsch liege? – BackDoorNoBaby

+1

Ich habe sie nicht rückwärts. – BackDoorNoBaby

+0

Er muss mit Unicode arbeiten. 'signed char' und' unsigned char' helfen hier überhaupt nicht. – bolov

Verwandte Themen