空间 网站,重庆建一个网站大概要多少钱,网站开发后端 书,做私人彩票网站位域#xff08;位段#xff09;
1、位域定义#xff1a;
有些数据在存储时并不需要占用一个完整的字节#xff0c;只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态#xff0c;用 0 和 1 表示足以#xff0c;也就是用一个二进位。正是基于这种考虑位段
1、位域定义
有些数据在存储时并不需要占用一个完整的字节只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态用 0 和 1 表示足以也就是用一个二进位。正是基于这种考虑C语言又提供了一种叫做位域的数据结构。
在结构体定义时我们可以指定某个成员变量所占用的二进制位数Bit这就是位域。
位段成员必须声明为int、unsigned int或signed int类型short char long。
位域列表的形式为 类型说明符 位域名位域长度
注
1.位
位是计算机存储的最小单位简记为b也称为比特(bit)每一位的状态只能是0或1。
2.字节
字节英文Byte是计算机用于计量存储容量的一种计量单位1个字节可以储存1个英文字母或者半个汉字。
3.字
字是表示计算机自然数据单位的术语在某个特定计算机中字是其用来一次性处理事务的一个固定长度的位bit组。 例如一台8位机它的1个字就等于1个字节字长为8位。如果是一台16位机那么它的1个字就由2个字节构成字长为16位。
4、位、字节、字之间的关系
1字 2字节 1字 16 位 1字节 8位 1位 1 比特 计算机的存储 1 B 8 bit 1 KB 1024B 1 MB 1024 KB 1 GB 1024 MB 1 TB 1024 GB
2、解释
struct bs{unsigned m;unsigned n: 4;unsigned char ch: 6;
};
后面的数字用来限定成员变量占用的位数。成员 m 没有限制根据数据类型即可推算出它占用 4 个字节Byte的内存。成员 n、ch 被:后面的数字限制不能再根据数据类型计算长度它们分别占用 4、6 位Bit的内存。
3、使用方法
1、如果一个字节所剩空间不够存放另一位域时应从下一单元起存放该位域。
struct bs
{
unsigned a:4 ;
unsigned :0 ;/*空域*/
unsigned b:4 ;/*从下一单元开始存放*/
unsigned c:4 ;
}
这个位域定义中a占第一字节的4位后4位填0表示不使用b从第二字节开始占用4位c占用4位。
2、位域的长度不能大于数据类型本身的长度比如int类型就能超过32位二进位。
3、位域可以无位域名这时它只用来作填充或调整位置。无名的位域是不能使用的。
struct k
{
int a:1 ;
int :2 ;/*该2位不能使用*/
int b:3 ;
int c:2 ;
};
位域在本质上就是一种结构类型 不过其成员是按二进位分配的。
4、例题
struct bs
{ unsigned a:1; unsigned b:3; unsigned c:4;
} bit,*pbit;
bit.a1;
bit.b7; //注意位域的赋值不能超过该域所能表示的最大值如b只有3位能表示的最大数为7若赋为8就会出错
bit.c15;
printf(%d,%d,%d/n,bit.a,bit.b,bit.c);
pbitbit;
pbit-a0;
pbit-b3;
pbit-c1;
printf(%d,%d,%d/n,pbit-a,pbit-b,pbit-c);
定义了位域结构bs三个位域为a,b,c。说明了bs类型的变量bit和指向bs类型的指针变量pbit。这表示位域也是可以使用指针的。
程序的9、10、11三行分别给三个位域赋值。( 应注重赋值不能超过该位域的答应范围)程序第12行以整型量格式输出三个域的内容。第13行把位域变量bit的地址送给指针变量pbit。第14行用指针 方式给位域a重新赋值赋为0。第15行使用了复合的位运算符 该行相当于 pbit-bpbit-b3位域b中原有值为7与3作按位与运算的结果为3(111011011,十进制值为 3)。同样程序第16行中使用了复合位运算 相当于 pbit-cpbit-c1其结果为15。程序第17行用指针方式输出了这三个域的值。
(141条消息) 位域的定义和使用Unix探索之旅的博客-CSDN博客位域定义