Рубрики

Хранение целочисленных и символьных значений в C

Целочисленные и символьные переменные так часто используются в программах, но как на самом деле эти значения хранятся в C, мало кому известно.
Ниже приведены несколько примеров, чтобы понять это:

  • Принимая положительное целочисленное значение как char:

    #include <stdio.h>

    int main()

    {

        char a = 278;

        printf("%d", a);

      

        return 0;

    }

    Выход:

    22
    

    Объяснение: Во-первых, компилятор преобразовывает 278 из десятичной системы счисления в двоичную систему счисления (100010110) внутри, а затем учитывает только первые 8 бит справа от этого числа, представленного в двоичном коде, и сохраняет это значение в переменной a. Это также даст предупреждение о переполнении .

  • Принимая отрицательное целочисленное значение как char:

    #include <stdio.h>

    int main()

    {

        char a = -129;

        printf("%d", a);

      

        return 0;

    }

    Выход:

    127
    

    Пояснение: Прежде всего, следует понимать, что отрицательные числа хранятся в форме дополнения 2 их положительного аналога. Компилятор конвертирует 129 из десятичной системы счисления в двоичную систему счисления (10000001) внутри, а затем все нули будут заменены на один, а один на нули (т. Е. Делать свое дополнение) (01111110), и один будет добавлен к его дополнению. через двоичное сложение, чтобы дать двоим дополнение этого числа (01111111). Теперь, самые правые 8 битов дополнения к двум будут взяты и сохранены как есть в переменной a. Это также выдаст предупреждение о переполнении .

Примечание: та же концепция используется для хранения целочисленных переменных с той разницей, что число битов, взятых в конце, составляет 16 (2 байта) или 32 (4 байта) бит, потому что размер переменных int равен 2 или 4 байта.

Рекомендуемые посты:

Хранение целочисленных и символьных значений в C

0.00 (0%) 0 votes