Почему вывод этой программы C 64, а не 320? - PullRequest
3 голосов
/ 15 марта 2019
#include <stdio.h>

int main() {
    int a = 320;
    char *ptr;

    ptr = (char *)&a;
    printf("%d", *ptr);

    return 0;
}

Я ожидал, что результат будет 320, но вместо этого я получаю 64. В чем причина?

Ответы [ 2 ]

9 голосов
/ 15 марта 2019

Если значение CHAR_BIT в вашей системе равно 8 (вероятно, так), то в указателе с разыменованным char * вы получите не более 8 бит. В двоичном формате значение 320 равно 0b000101000000.

Может показаться, что ваша система использует порядок байтов с прямым порядком байтов; младшие 8 бит из 320 равны 0b01000000, что составляет 64 в базе 10.

1 голос
/ 15 марта 2019
320 = 0b101000000
0b0100000  = 64

вы используете указатель на символ, вы должны использовать указатель типа int, ptr = (char *)&a;

...