在 C 语言中有好几次保证一个类型至少有一定的大小,但不一定完全是那个大小(sizeof(int)
可能导致 2 或 4)。但是,我需要绝对确定某些大小和内存位置。如果我有如下工会:
typedef union{
struct{
unsigned int a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1;
};
unsigned int val:8;
} foo;
是否绝对保证 的值为val
8 位长?此外,是否保证a
是 的最高位val
,并且b
是第二位?我想做这样的事情:
foo performLogicalNOT(foo x){
foo product;
product.val = ~x.val;
return product;
}
因此,输入特定标志后,返回一个带有完全相反标志的联合(11001100 -> 00110011
)。实际的函数更复杂,并且要求的大小val
正好是 8。我也想以相同的方式执行 AND 和 OR,因此每个a
和b
值都在我期望它们的位置和我期望的大小是至关重要的他们是。