KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to learn C at got stuck with datatype-sizes at the moment. Have a look at this code snippet: #include <stdio.h> #include <limits.h> int main() { char a = 255; char b = -128; a = -128; b = 255; printf("size: %lu\n", sizeof(char)); printf("min: %d\n", CHAR_MIN); printf("max: %d\n", CHAR_MAX); } The printf-output is: size: 1 min: -128 max: 127 How is that possible? The size of char is 1 Byte and the default char seems to be signed (-128...127). So how can I assign a value > 127 without getting an overflow warning (which I get when I try to assign -128 or 256)? Is gcc automatically converting to unsigned char? And then, when I assign a negative value, does it convert back? Why does it do so? I mean, all this implicitness wouldn't make it easier to understand. EDIT: Okay, it's not converting anything: char a = 255; char b = 128; printf("%d\n", a); /* -1 */ printf("%d\n", b); /* -128 */ So it starts counting from the bottom up. But why doesn't the compiler give me a warning? And why does it so, when I try to assign 256?
Tags (comma-separated)
Save Edits
Cancel