结构体位结构

位结构

    位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构 比按位运算符更加方便。

位结构定义的一般形式为:

     struct位结构名{ 

          数据类型 变量名: 整型常数; 

          数据类型 变量名: 整型常数; 

     } 位结构变量; 

其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。

变量名是选择项, 可以不命名, 这样规定是为了排列需要。

例如: 下面定义了一个位结构。

struct{

unsigned incon: 8;  /*incon占用低字节的0~7共8位*/

unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/

unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/

unsigned blink: 1;  /*blink占用高字节的第7位*/

}ch;

位结构成员的访问与结构成员的访问相同。

例如: 访问上例位结构中的bgcolor成员可写成:

ch.bgcolor

注意:

1. 位结构中的成员可以定义为unsigned, 也可定义为signed,  但当成员长度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。

2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针, 如果是指针, 其成员访问方式同结构指针。

3. 位结构总长度(位数), 是各个位成员定义的位数之和,  可以超过两个字节。

4. 位结构成员可以与其它结构成员一起使用。

例如:

struct info{

char name[8];

int age;

struct addr address;

float pay;

unsigned state: 1;

unsigned pay: 1;

}workers;’

上例的结构定义了关于一个工从的信息。其中有两个位结构成员, 每个位结构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工

人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。

时间: 2024-08-24 23:03:54

结构体位结构的相关文章

结构体位制 中存在 有符号 与 无符号 -- C

#include <stdio.h> #include <stdlib.h> #include <string.h> /* 有符号 结构体1 */ struct bits { int b1:5; /* 因为是int型,最大设置32位,由于int型是有符号整形, 所以这里5位为有符号类型. 11111 -1 10000 -16 01111 15 00000 0 */ int :2; int b2:2; /* 11 -1 10 -2 01 1 00 0 */ int b3:

结构体位制详解 -- C

我基本总结下面4部分: 1.占位大小问题. 2.字节对齐问题. 3.特殊保留位0. 4.该结构体在内存中存放位置. #include <stdio.h> #include <stdlib.h> #include <string.h> //基本概念 /* struct _M { (1) 类型 参数名 : 占位大小: (2) 类型 : 占位大小: } (1) 类型 -- int,unsigned(32位),short,char. 参数名 -- 同个结构体里面不能重名参数.

C#调用C/C++动态库 封送结构体,结构体数组

因为公司一直都是做C++开发的,因客户需要要提供C#版本接口,研究了一下C#,发现其强大简洁, 在跨语言调用方面封装的很彻底,提供了强大的API与之交互.这点比JNA方便多了. Java与C#都只能调用C格式导出动态库,因为C数据类型比较单一,容易映射. 两者都是在本地端提供一套与之映射的C#/java描述接口,通过底层处理这种映射关系达到调用的目的. 一. 结构体的传递 Cpp代码   #define JNAAPI extern "C" __declspec(dllexport) /

java里的分支语句--程序运行流程的分类(顺序结构,分支结构,循环结构)

JAVA里面的程序运行流程分三大类: 1,顺序结构:顺序结构就是依次执行每一行代码 2,分支结构:分支结构就是按不同的条件进行分支 3,循环结构:一段代码依条件进行循环执行. 其中,分支结构有两大类: if...else...结构和switch...结构       switch中的case支持的数据类型只有四种:    char  (字符型)    byte  (比特型)    short (短整型)    int     (整型) 注意switch里面的判断语句后面需要加break,否则的话

Java基础之结构--&gt;&gt;条件结构与循环结构

Java中程序流程控制语句包括条件结构.循环结构和跳转语句 4.1条件结构 条件结构包括顺序结构和选择结构.顺序结构在程序执行中没有跳转和判断,知道程序结束为止.选择结构包括 if 语句,if-else 语句,switch 语句,在程序执行过程中可以改变程序的执行流程. 4.1.1 if 语句 if 语句是条件判断后再处理的一种语法结构 if(条件表达式){ //条件成立后执行 一条或多条语句 } //条件表达式的值只能是 boolean 类型 false / true 4.1.2 if-els

Java程序设计的基本结构 - 循环结构

Java程序设计的基本结构 - 循环结构 文本关键字:基本结构.循环结构.while.do-while.for 一.循环的基本结构 为了讲解方便,我们可以将循环结构划分为四个部分来进行描述.当然,这四个部分并不是都要出现,甚至在都不出现时也可以构成一个循环结构.并且,对于不同的循环结构,每个部分的相对位置也不同. 1. 初始化部分 在进入循环结构之前可以定义一些循环中以及循环结束后都要用到的变量,进行赋值. 2. 判断条件部分 用于决定是否继续进行循环,如果为假,则循环结束.判断部分可以直接使用

C语言----结构体---结构体与函数

结构作为参数的函数 整个结构可以作为参数传入函数 这时是在函数中新建了一个结构变量,并复制调用这个结构的值(重点,只是把值传入函数,而函数外面真正的变量并没有改变,与数组不同) 函数也可以返回一个结构 直接来个简单的例子吧: 问题:用户输入今天的日期,输出明天的日期. 提示:闰年,每个月最后一天, 代码: #include <stdio.h>#include <stdbool.h>/* 根据今天的日期算出明天的日期.*/ //结构体放在函数外侧,相当于一个全局变量,所有的函数都能使

C语言 结构体(嵌套结构体--结构体数组)

//结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _parent{ int num; char name[30]; //结构体内部定义结构体,如果不定义嵌套结构体变量,那么该嵌套结构体的属性则会被当作父结构体的属性 struct son{ int age; char sna

go结构,结构嵌套,接口,指针的测试和结论

package main import ( "fmt" ) //T是M1接受者,不是实现M2接受者 //*T是M1接受者,也是M2的接受者 //所以T对象不可以赋值给接口对象.*T可以 //结论: // 1.结构T实现接口I时,如果想通过方法改变其属性,则需要*T实现I所有方法: // 2.嵌套结构时,编译器会将子结构的属性和方法拷贝给父结构,与子结构无关系了: // 3.赋值给接口对象I1,或者接口作为函数参数时,I1:=&T,因为是*T实现了接口I,否则报错 type T