位段(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这俩个值。

如果创建的结构体中只有大小为1的位段,那么就能把许多Boolean值塞入一小块数据里面了。有时开发用这个可能会有奇效,比如需要缓存许多Boolean值时。

时间: 2024-10-25 14:05:25

位段(bitfield)的相关文章

C语言中的位段(位域)

位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间.含有位段的结构体(联合体)称为位段结构.采用位段结构既能够节省空间,又方便于操作. 位段的定义格式为: type  [var]: digits 其中type只能为int,unsigned int,signed int三种类型(int型能不能表示负数视编译器而定,比如VC中int就默认是signed int,能够表示负数).位段名称var是可选参数,即可以省略.digits表示该位段所占的二进制位数. 一.位段的

Effective Objective-C 2.0重读笔记---1

上次看这本书的时候匆匆走了一遍,最近不太忙,重温了一遍,把笔记写出来~.. 有兴趣的可以去买一本,感觉这本书还是挺不错的 由于大部分是在坐车的时候用手机写的,所以代码很少,图也很少 1. 尽量使用向前声明,延后引入头文件的时间,这样可以减少编译时间2. 使用arraywithobjects:....如果遇到为空的变量,就会自动终止,后面的变量便会添加不上,切不会报错,会造成数据不一致问题,所以尽量使用字面量语法创建相关对象,减少出错且减少代码量3. 使用字面量创建的对象都是不可变的,如果要获得可

C语言位域浅析

 位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间.含有位段的结构体(联合体)称为位段结构.采用位段结构既能够节省空间,又方便于操作. 位段的定义格式为: type  [var]: digits 其中: type只能为int,unsigned int,signed int,char, unsigned char 五种类型之一,digits表示该位段所占的二进制位数 位段长度digits不能超过类型type对应的数据类型占用的大小,如若type为char,则di

C语言类型转换与原型申明

C语言类型转换与原型申明 关于整型字面值 字面值这个术语是字面常量值的缩写,指定了自身的值,并且不允许发生改变.当有一程序内出现整形字面值时,它是属于整型家庭9种不同类型中的哪一种呢?这取决于如何书写,例如下整型字面值后添加字符L(长整型).U(无符号整型).另外,字符常量(例:'M'.'\377')的类型总是int. 类型转换 c语言中类型转换比一般人想象的要广泛得多.在涉及类型小于int或double的表达式中都可能发生转换.下面程序执行结果是4. printf("%d",size

科软-信息安全实验01-ICMP重定向

目录 一 前言 二 Talk is cheap, show me the code 三 效果演示 四 遇到的问题&解决 一 前言 文章不讲解理论知识哈,想学习理论知识的,认真听课??,也可以参考郭老师的讲义:信息安全课程 ustcsse308 对于Linux,我只是个半路闯进来的小白,所以做实验过程中经常会被Linux内核玩得怀疑人生.因此,我觉得很有必要先阐明实验的环境,以免各位同学不小心掉坑里.当然,如果你就是想爬坑,咱也拦不住?? 实验环境 / 工具: VMware workstation

位域结构体简介

最近实习接触到一个新的知识点,C/C++的位域结构体. 以下开始摘抄自:here 位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间.含有位段的结构体(联合体)称为位段结构.采用位段结构既能够节省空间,又方便于操作. 位段的定义格式为: 1 type [var]: digits 其中type只能为int,unsigned int,signed int三种类型(int型能不能表示负数视编译器而定,比如VC中int就默认是signed int,能够表示负数).位段名

C结构体之位域(位段)

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

位段那些事

 位段(以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<