Почему int так работает? - C (СИ)

Формулировка задачи:

1. Задача: Обычно под переменную типа int отводится 4 байта. Определите (узнайте, вспомните) максимально и минимально возможные значения для переменных такого типа. Объявите в программе переменную max типа int и присвойте ей значение на единицу больше максимально допустимого. Запрограммируйте вывод значения переменной на экран. Скомпилируйте программу и запустите. Чему равна переменная? Почему? Моё решение:
#include <stdio.h>
#include <conio.h>
main() {
int max = 2147483648;
printf ("%d" , max);
     getch();
     }
Я не понимаю почему результат работы программы "-2147483648" и это собственно говоря и есть мой вопрос. Я понимаю, что в одном байте 8 бит и в 1 байт можно записать 2^8 (256) разных вариантов комбинаций восьмистроковых единичек и ноликов, поэтому максимальное знаечение int может быть 2^32 т.к. оно 4-рех битное. Соответственно диапазон чисел с которым можно работать в int - от -2147483648 до 2147483647, либо от 0 до 4294967295 если не брать отрицательные числа. Я пробовал увеличивать max на два. Результат "-2147483647", увеличил на 3 - результат "-2147483646". Почему так происходит? И почему когда я присваиваю max значение 4294967295 то получаю в результате -1 ?

Код к задаче: «Почему int так работает? - C (СИ)»

textual
#include <stdio.h>
#include <limits.h>
void printb(int x){
    int i;
 
    for ( i=sizeof(x)*8-1;i>=0;--i)
        printf ("%d",x>>i&1);
}
 
int main() {
    int max = INT_MAX;
    int min = INT_MIN;
    printf ("max=%d\nmin=%d\n" , max, min);
    printf ("hex_max=%x\nhex_min=%x\n",max, min);
    printf("\n");
    printb(max);
    printf("\n");
    printb(min);
    printf("\n");
    return 0;
}

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

13   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ