Управление памятью битового поля в C
Чтобы понять память в битовых полях, я создал тестовую программу ниже.
#include <stdio.h>
int main()
{
int a;
typedef struct {
int b7 : 1;
int b6 : 1;
int b5 : 1;
int b4 : 1;
int b3 : 1;
int b2 : 1;
int b1 : 1;
int b0 : 1;
} byte;
byte ab0 = {0,0,0,0,0,0,0,1};
a = *(int*)&ab0;
printf("ab0 is %x \n",a);
byte ab1 = {0,0,0,0,0,0,1,0};
a = *(int*)&ab1;
printf("ab1 is %x \n",a);
byte ab2 = {0,0,0,0,0,1,0,0};
a = *(int*)&ab2;
printf("ab2 is %x \n",a);
byte ab3 = {0,0,0,0,1,0,0,0};
a = *(int*)&ab3;
printf("ab3 is %x \n",a);
byte ab4 = {0,0,0,1,0,0,0,0};
a = *(int*)&ab4;
printf("ab4 is %x \n",a);
byte ab5 = {0,0,1,0,0,0,0,0};
a = *(int*)&ab5;
printf("ab5 is %x \n",a);
byte ab6 = {0,1,0,0,0,0,0,0};
a = *(int*)&ab6;
printf("ab6 is %x \n",a);
byte ab7 = {1,0,0,0,0,0,0,0};
a = *(int*)&ab7;
printf("ab7 is %x \n",a);
return 0;
}
Скомпилируйте и запустите
gcc -Wall test.c
./a.out
ab0 is 80
ab1 is 40
ab2 is 20
ab3 is 10
ab4 is 8
ab5 is 4
ab6 is 2
ab7 is 1
Тот же вывод, когда я запускаю код онлайнhttp://codepad.org/ntqyuixp
Я не могу понять его вывод.
Ожидаемый результат: Согласно моему пониманию, результат должен быть как
ab0 is 1
ab1 is 2
ab2 is 4
ab3 is 8
ab4 is 10
ab5 is 20
ab6 is 40
ab7 is 80
Пожалуйста, дайте мне знать, что мне не хватает.
Играет ли endianness какую-либо роль?
Как должен быть написан код для моего ожидаемого поведения?