Я пытаюсь выучить C при застревании с размерами DataType на данный момент.
Посмотрите на этот фрагмент кода:
#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);
}
PrintF-выход:
size: 1
min: -128
max: 127
Как это возможно? Размер CHAR - это 1 байт, а символ по умолчанию, кажется, подписан (-128 ... 127). Итак, как я могу назначить значение> 127, не получив предупреждение о переполнении (которое я получаю, когда я пытаюсь назначить -128 или 256)? GCC автоматически преобразует в unsigned Char? А затем, когда я назначаю отрицательное значение, это конвертирует обратно? Почему это делает это? Я имею в виду, все это неясность не сделало бы легче понять.
Редактировать:
Хорошо, это не преобразует что-либо:
char a = 255;
char b = 128;
printf("%d\n", a); /* -1 */
printf("%d\n", b); /* -128 */
, поэтому он начинает подсчитывать снизу вверх. Но почему компилятор не дает мне предупреждение? И зачем это так, когда я пытаюсь присвоить 256?