Powiel możliwe:
Practical Use of Zero-Length BitfieldsCo jest zero-width bitowe pole
Dlaczego niektóre konstrukcje mają zerową szerokość pola bitowe, i dlaczego jest to konieczne?
struct foo {
int a:3;
int b:2;
int :0; // Force alignment to next boundary.
int c:4;
int d:3;
};
int main()
{
int i = 0xFFFF;
struct foo *f = (struct foo *)&i;
printf("a=%d\nb=%d\nc=%d\nd=%d\n", f->a, f->b, f->c, f->d);
return 0;
}
Wyjście powyższego programu jest
[email protected]:~/programs/test$ ./a.out
a=-1
b=-1
c=-8
d=0
proszę wyjaśnić dlaczego te wartości są ujemne, a układ pamięci tych zmiennych wewnątrz struktury?
Jest to odpowiedź firmy Microsoft, proponuję spojrzeć: http://msdn.microsoft.com/en-us/library/ewwyfdbe(v=vs. 71) .aspx, mimo to wyrównanie jest zawsze zależne od kompilatora. –
struct { int a: 3; int b: 2; int: 0; int c: 4; int d: 3; }; , która daje układ 000aaabb 0ccccddd zamiast bez: 0; 0000aaa bccccddd Pole szerokości 0 mówi, że następujące pola bitowe powinny zostać ustawione na następnym obiekcie atomowym (znak). Kolejność danych zadeklarowanych jako pola bitowe jest od małego do wysokiego bitowego lub w inny sposób w zależności od architektury. –