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
值都應該是我期望的值,我期望他們是。
[位域不可移植,C不能保證機器字中字段的排序](http://stackoverflow.com/a/1044689/183120)。 – legends2k