结构体中的冒号表示位域。
位域:

由于某些信息的存储表示只需要几个bit位,就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理。

struct  Bit
{int  a:3;int  b:5;int  c:7;
}bit;

说明:

1、位域必须存储在同一个类型中,不能跨类型,同时也说明位域的长度不会超过所定义类型的长度。如果一个定义类型单元里所剩空间无法存放下一个域,则下一个域应该从下一单元开始存放。例如:所定义的类型是int类型,一共32为,目前用掉了25位还剩下7位,这时要存储一个8位的位域元素,那么这个元素就只能从下一个int类型的单元开始而不会在前面一个int类型中占7为后面的int类型中占1位。

2、如果位域的位域长度为0表示是个空域,同时下一个域应当从下一个字节单元开始存放。

3、使用无名的位域来作为填充和调整位置,切记该位域是不能被使用的。

4、位域的本质上就是一种结构体类型,不同的是其成员是按二进制位来分配的。

1.结构体中unsigned int类型 

#include <iostream>
using namespace std;typedef struct Bit{unsigned int a:1; //0000 0001 = 1;占1bit,超出的部分为0,没有超出的部分,正常计算即可。unsigned int b:3; //0000 0111 = 7; 占3bit,没有超出的部分,正常计算即可。unsigned int :0;  //0   = 0unsigned int d:6; //0011 1111 = 64;占6bit,没有超出的部分,正常计算即可。
} Bit;int main(int argc, char *argv[]){Bit bit;cout << "sizeof(Bit) = " << sizeof(Bit) << endl;//a(bit) + b(3bit) + d(6bit);a+b = 1byte; d = 1bytebit.a = 2;   //10cout<<bit.a<<endl;//0; 溢出bit.b = 7;   //0000 0111cout<<bit.b<<endl;//7bit.b = 8;   //1000cout<<bit.b<<endl;//0: overflowbit.d = 86;  //0101 0110 & 0011 1111 = 0001 0110 = 22cout<<bit.d<<endl;      bit.a = 1;//0000 0001cout<<bit.a<<endl;//1return EXIT_SUCCESS;
}

2.结构体中int类型 

#include<iostream>
#include <string.h>using namespace std;
typedef struct Bit{   int x:5;//0001 1111   int y:2;//0000 0011
}Bit;int main(){    Bit bit;cout << "len = " << sizeof(Bit)<< endl;//4bit.x = 3;//0000 0101cout <<"bit.x = "<< bit.x <<endl;//3bit.x = 16;//0001 0000cout <<"bit.x = "<< bit.x <<endl;//-16bit.y = 1;//0000 0001cout <<"bit.y = "<< bit.y <<endl;//1bit.y = 2;//0000 0010cout <<"bit.y = "<< bit.y <<endl; //-2
}

注意:int和unsigned int使用区别

1.不管是什么类型,只要超过定义的bit位,超过的部分溢出为0.

2.如果int类型定义的最高的bit为1,则整个数计算为负数。

3.如果是unsigned int定义最高bit为1,则整个数计算还是为正数,不影响。

例如:

#include<iostream>
#include <string.h>using namespace std;
typedef struct Bit{   int x:1;//0000 0001int y:2;//0000 0011
}Bit;int main(){    Bit bit;cout << "len = " << sizeof(Bit)<< endl;//4//如果int类型定义为int x:1, 最高位1为负号,为-1bit.x = 1;//0000 0001cout <<"bit.x = "<< bit.x <<endl;//-1//如果超出1bit的范围,超出的部分为0.bit.x = 2;//0000 0010cout <<"bit.x = "<< bit.x <<endl;//溢出:0}

C语言之结构体冒号作用(五十一)相关推荐

  1. C语言结构体的作用、定义、使用方法以及实例

    目前已学的数据类型:数组(1.所有数据的类型必须一致   2.访问数组的成员必须通过下标) 学籍管理系统:学生(姓名.学号.性别.年龄.成绩...) 飞机票订票系统:机票(订票时间.班号.起点.终点. ...

  2. c语言 结构体 ppt,第8章C语言的结构体和共同体.ppt

    <第8章C语言的结构体和共同体.ppt>由会员分享,可在线阅读,更多相关<第8章C语言的结构体和共同体.ppt(41页珍藏版)>请在皮匠网上搜索. 1.1第八章结构体.共用体和 ...

  3. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  4. Go语言基础 结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...

  5. 【剑仙教程】易语言的结构体。自定义数据类型。

    1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...

  6. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  7. c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧

    单片机C语言 - 基于结构体的面向对象编程技巧 一.面向对象 面向对象是软件开发方法,是相对于面向过程来讲的.通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 ...

  8. Go语言中结构体打Tag是什么意思?

    前言 哈喽,大家好,我是asong.今天想与大家分享Go语言中结构体标签是怎么使用的,以及怎样定制自己的结构体标签解析. 大多数初学者在看公司的项目代码时,看到的一些结构体定义会是这样的: type ...

  9. Go语言中结构体打 Tag 是什么意思?

    前言 哈喽,大家好,我是asong.今天想与大家分享Go语言中结构体标签是怎么使用的,以及怎样定制自己的结构体标签解析. 大多数初学者在看公司的项目代码时,看到的一些结构体定义会是这样的: type ...

最新文章

  1. linux服务器性能监控命令汇总之sar命令(五)
  2. oci连接mysql_OCILIB 连接Oracle数据库——插入数据
  3. excel插入行 uipath_Uipath中excel的activities用法介绍
  4. tableView的用法具体解释
  5. 代数学笔记2: 域扩张(二)
  6. 11dayC语言指针-指针变量
  7. 每日笔记---使用@ConfigurationProperties读取yml配置
  8. Tomcat启动时日志报 dcom.sun.manager.jmxremote 异常导致无法正常启动使用
  9. 在虚拟机中配置FastDFS+Nginx模块
  10. 自动驾驶技术(1)--控制工程篇概述
  11. 几种常用的JSON解析工具的使用
  12. c语言图形时钟编程,c语言+图形编程——打造浅易的时钟
  13. 八进制数转十进制计算机计算器,八进制转十进制计算器
  14. java自动拼图_java 拼图游戏完整源码,图片剪切,包含拼图自动还原功能
  15. word文件的样式如何修改?
  16. C++ : 陶陶摘苹果
  17. Arduino使用手指测心跳模块
  18. 快速学习COSMIC方法之九:如何识别兴趣对象?
  19. 夜雨寄北 文/江湖一劍客
  20. 世界各国的12个王朝

热门文章

  1. html的 转义,html字符转义
  2. win10 vscode搭建go语言开发环境
  3. PLC信号处理系列之滤波器设计(MATLAB滤波器设计工具箱介绍)
  4. (系列笔记)13.SVR模型
  5. Uploader 文件上传
  6. 过关检测-Lv3_ 数据结构
  7. 软件测试培训哪里好?就业前景可观吗?
  8. 黑马学生管理系统代码初了解
  9. WIFI营销读书笔记之一:Wifi营销基础知识
  10. BurpSuite修改字体及大小