Если мы дадим a = 123 1-й байт переменной a, имеющей значение 123, но если мы дадим a = 1234, то придет какое-то другое значение - PullRequest
0 голосов
/ 04 декабря 2018

Когда я даю так:

int main()
{
    int a =123;
    char *p =(char*)&a;
    printf("%d\n",*p);
    ++p;
    printf("%d\n",*p);
    ++p;
    printf("%d\n",*p);
    ++p;
    printf("%d\n",*p);
}

Я получаю вывод, как

123
0
0
0

Но мы, я дал так:

int main()
{
    int a =1234;
    char *p =(char*)&a;
    printf("%d\n",*p);
    ++p;
    printf("%d\n",*p);
    ++p;
    printf("%d\n",*p);
    ++p;
    printf("%d\n",*p);
}

Я получилвыведите как

-46
4
0
0

Я был сбит с толку тем, как система хранит значение (123/1234) в 4 байтах переменной a.если оно меньше 127, то 1-й байт занимает значение как то, что мы дали в качестве ввода (iw 123).

Но если значение больше 127, то 1-й и 2-й байт переменной a хранит другое значение.Пожалуйста, объясните, как это работает?

1 Ответ

0 голосов
/ 04 декабря 2018

если вы храните 1234 в целом числе (4 байта), для хранения 1234 требуется всего два байта, поскольку 1234 меньше 65535, поэтому оставшиеся два байта заполняются 0. Выводится первый байт -46, потому что разыменовывается с помощью знака со знакомуказатель, таким образом, он печатает значение со знаком данных, доступных в младшем значащем байте в двоичном формате 1234.

Двоичный код 1234 в 4 байтах будет выглядеть как

0000 0000, 0000 0000, 0000 0100, 1101 0010
(byte 3)   (byte 2)   (byte 1)   (byte 0)

для байта 0, бит знака равенустанавливается, так что берется дополнение до двух, и ставится отрицательный знак, который является ничем иным, как -46

десятичное значение байта 1 равно 4

байт 2, а байт 3 остается неиспользованным для хранения 1234, поэтомупечатает 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...