c位段

假如程序表示四盏灯的开关状态灯只有开或关两种状态所以用1和0就可以表示为了节省内存就用一个二进制位表示一盏灯这里就定义位域用 a b c d 各表示一盏

这里定义时注意选用无符号类型位域允许用各种格式输出其他的和结构类型使用基本相同注意一点就是一个位域不能跨字节,长度不能大于一个字节

#include <stdio.h>#include <conio.h>typedef struct tagkg{ unsigned int a:1; unsigned int b:1; unsigned int c:1; unsigned int d:1;}kg;

int main(void){ kg s;

 s.a = 1; s.b = 0; s.c = 1; s.d = 0; printf("%d\n%d\n%d\n%d\n" , s.a, s.b, s.c, s.d);

 getch();}
时间: 2024-10-10 14:36:43

c位段的相关文章

位段那些事

 位段(以32位int整数的机器为例) 概念: C语言允许在一个结构体中以位为单位来指定成员所占内存的实际大小,这种以位为单位的成员我们称为 位段,位段是一种特殊的结构体,位段的声明和任何普通的结构体成员声明类似,如下: Struct 位段结构体名 { Unsigned 位段名:位段长度: Unsigned 位段名:位段长度: ------.. Unsigned 位段名:位段长度: }位段结构体变量名: 但有两个例外,首先位段成员必须声明成int ,unsigned int, signed in

c语言中位段的声明和结构

位段 (bit field)也叫位域 位段的声明和结构类似,但是它的成员是一个或多个位的字段,这些不同长度的字段实际上存储于一个或多个整形变量中. 位段的声明和任何普通成员声明相同,有两个例外: 1.位段成员必须声明为int ,signed int(有符号整型),unsigned int(无符号整型) 2.成员名后面是一个冒号和一个整数,这个整数指定该位段所占用位的数目. Eg: #include<stdio.h>                             #include<

C结构体之位域(位段)

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”.所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数.每个域有一个域名,允许在程序中按域名进行操作. 这样就可以把几个不同的对象用一个字节的二进制位域来表示.一.位域的定义和位域变量的说明 位域定义与结构定义相仿,其形式为: struct 位域结构

结构体内包含位段,其数据内存分布

 struct  _PACKER_DATA {          unsigned char  IsDLL     :1;              // 是否为DLL          unsigned char  Config    :3;              // 设置          unsigned char  OldOEP   :4;             // 程序入口点          int           nSize                   ;  

[整理]C结构实现位段(bit field)

#include <stdio.h> #include <string.h> typedef struct A{ int a:5; int b:3; unsigned c:8; unsigned d:8; } Type_A; /* VS2010, Windows XP, Debug模式下运行 */ int main(void) { struct A a; char s[]="12345678"; printf( "%d\n",sizeof(T

位段(bitfield)

struct { unsigned int fieldA        :       4 ; unsigned int fieldB        :       2 ; unsigned int fieldC        :       1 ; } ; 这是c语言的特性,很少人使用. fieldA代表将占用4个二进制位,fieldB代表占用2个二进制位,fieldC代表占用1个二进制位.于是,fieldA可以表示0到127之间的值,fieldC可以表示0或1这俩个值. 如果创建的结构体中只

C语言位段的应用:统计二进制的位数

位段是C语言中使用较少的一种特殊的结构体,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为"位段"或称"位域"( bit field) .利用位段能够用较少的位数存储数据. 信息的存取一般以字节为单位.实际上,有时存储一个信息不必用一个或多个字节,例如,"真"或"假"用0或1表示,只需1位即可.在计算机用于过程控制.参数检测或数据通信领域时,控制信息往往只占一个字节中的一个或几个二进制位,常

位域(位段)

有些信息存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位. 为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为"位域"或者"位段". 所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数.每个域有一个域名,运行在程序中按域名进行操作. (1)位域的定义和位域变量的说明 位域定义与结构定义相仿,其形式为:              struct  位域结构名 {位域列表}; 其中位域列表的形式为:

STM32 中 BIT_BAND(位段/位带)和别名区使用入门(转载)

一. 什么是位段和别名区 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 :这样就把P1口的第三个脚(BIT2)置0置1.而现在STM32的位段.位带别名区就为了实现这样的功能. 它的对象可以是SRAM.I/O和外设空间.要实现对这些地方的某一位的操作.它是这样做的:在寻址空间(32位对应的地址空间为 4GB )的另一地方,取个别名区空间,从这个地址开始处,每一个字(32BIT)对

【c语言】位段大小的计算以及宏的应用

// 位段大小的计算以及宏的应用 #include <stdio.h> #include <malloc.h> #define MAX_SIZE A+B struct _Record_Struct { unsigned char Env_Alarm_ID : 4; unsigned char Paral : 2; unsigned char state; unsigned char avail : 1; }*Env_Alarm_Record; int main() { int A