Не надо думать, надо проверять! Я действительно не прав: #include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
typedef struct{
uint8_t a: 1;
uint8_t b: 2;
uint8_t c: 5;
} shit_t;
int main(int argc, char **argv){
if(argc < 3) return -1;
shit_t X = {0};
int a = atoi(argv[1]), b = atoi(argv[2]);
int _ = a & b;
X.a = _; X.b = _; X.c = _;
printf("a/b/c=%d/%d/%d\n", X.a, X.b, X.c);
return 0;
}
gcc 1.c
./a.out 8 7
a/b/c=0/0/0
./a.out 1 3
a/b/c=1/1/1
./a.out 3 7
a/b/c=1/3/3
./a.out 255 7
a/b/c=1/3/7
./a.out 7 4
a/b/c=0/0/4
Как видите, автоматом это все "урезается" до содержимого. Но вот на поведение последнего я надеялся иначе… А тут - бдыщ серпом по яйцам, и все старшие биты в мусорку…