C语言位域的简单使用

#include <stdio.h>
#include <stdlib.h>
/* 存储数据事实上并不是一定要存储字节,而是可以存储bit,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用0和1表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种数据结构,叫做“位域”或“位段”。

位域是操控位的一种方法(操控位的另一种方法是使用按位运算符,按位运算符将在之后的笔记中做介绍)。

位域通过一个结构声明来建立:该结构声明为每个字段提供标签,并确定该字段的宽度。例如,下面的声明建立了个4个1位的字段,一个2位的字段:
————————————————
 */
struct bit_data
{
    /* data */
    int num0: 1;//冒号后面的数字表示占多少个bit
    int num1: 1;
    int num2: 1;
    int num3: 1;
    int k: 2;
}test;

int main()
{
    int memory = 0;
    memory = sizeof(test);
    printf("The struct memory is %d\n",memory);// memory is 4
    //这是因为,a、b、c成员所占的位长之和在一个存储单元(此处为int类型所占的字节数)内,即4个字节内,所以struct bit_data类型的变量所占的字节长度为4个字节(实际a、b、c一共占用6bit,还有26bit空间为保留的空白)。
    //至于为什么不是用1个byte来存取,还是跟内存对齐有关,便于读取
    test.num0 = 2;// overflow: 因为只是一个bit,只能表示0或1
    test.num1 = 1;
    test.num2 = 0;
    test.num3 = 10;//overfolw
    printf("num0= %d,num3 = %d\n",test.num0,test.num3);//num0= 0,num3 = 0
    // 因为2的二进制为10,10的二进制为1010,而事实上只能存取一位,截断后结果都为0

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值