本帖最后由 阿里兄 于 2023-4-24 17:51 编辑
关于位域操作有几点需要注意:
1)位域的地址不能访问,因此不允许将&运算符用于位域。不能使用指向位域的指针也不能使用位域的数组(数组是种特殊指针)。例如,scanf函数无法直接向位域中存储数据: 2)位域不能作为函数返回的结果。 3)位域以定义的类型为单位,且位域的长度不能够超过所定义类型的长度。例如:定义 int a:33 是不允许的。 4)位域可以不指定位域名,但不能访问无名的位域。 5)位域的表示范围: - 位域的赋值不能超过其可以表示的范围。 - 位域的类型决定该编码能表示的值的结果。 6)带位域的结构在内存中各个位域的存储方式取决于编译器,既可从左到右也可从右到左存储。 7)位域的实现会因编译器的不同而不同,使用位域会影响程序可移植性。因此如无必要,最好不要使用位域。 8)尽管使用位域可以节省内存空间,但却增加了处理时间。当访问各个位域成员时,需要把位域从它所在的字中分解出来或反过来把一值压缩存到位域所在的字位中。
|