我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言的位段与枚举详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言的位段与枚举详解

1.什么是位段? 

位段的声明和结构是类似的,有两个不同: 

①位段的成员必须是 int、unsigned int 或signed int 

②位段的成员名后边有一个冒号和一个数字 

例如:

struct A
{
        //4byte=32bit    int 4个字节
        //开辟4个字节
        int _a : 2 ;//30(分配了2字节,还剩30字节)
        int _b : 5 ;//25
        int _c : 10 ;//15
        //在开辟4个字节
        int _d : 30 ;//超出剩余的开辟内存大小,根据C标准可能用前面的15字节在开辟15字节                             //也可能不用重新开辟30字节
};

 简言之:位段就是规定变量占的比特位!

2.位段的内存分配、跨平台与使用 

特别提醒: 

1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型 

2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式(char准确来说是int类型,反汇编内部处理为int)来开辟的

3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段(问题在于多余内存使用和开辟上) 例如:

struct S {
char a:3;
char b:4;
char c:5;
char d:4;
};
struct S s = {0};
s.a = 10; 
s.b = 12; 
s.c = 3;
s.d = 4;

 位段的跨平台问题:

1. int 位段被当成有符号数还是无符号数是不确定的。 

2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机 器会出问题。 

3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。 

4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是 舍弃剩余的位还是利用,这是不确确定的。 

总结: 跟结构相比,位段可以达到同样的效果,但是可以很好的节省空间,但是有跨平台的问题存在 

位段的应用: 

3.什么是枚举? 

枚举顾名思义就是一一列举。 

把可能的取值一一列举。 

例如:

//(可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值)
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
enum Sex//性别
{
MALE,
FEMALE,
SECRET
};
enum Color//颜色
{
RED,
GREEN,
BLUE
};
//以上定义的 enum Day , enum Sex , enum Color 都是枚举类型
//{}中的内容是枚举类型的可能取值,也叫枚举常量
//枚举的初始化
enum Color//颜色
{
RED=1,
GREEN=2,
BLUE=4
};
 

4.枚举的优点与使用 

我们可以使用 #define 定义常量,为什么非要使用枚举? 

枚举的优点: 

1. 增加代码的可读性和可维护性

2. 和 #define 定义的标识符比较枚举有类型检查,更加严谨。

3. 防止了命名污染(封装)

4. 便于调试

5. 使用方便,一次可以定义多个常量 

枚举的使用:

enum Color // 颜色
{
RED = 1 ,
GREEN = 2 ,
BLUE = 4
};
enum Color clr = GREEN ; // 只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
clr = 5;               //这样是错误的!

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!      

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言的位段与枚举详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言中位段与枚举是什么意思

这篇文章将为大家详细讲解有关C语言中位段与枚举是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.什么是位段? 位段的声明和结构是类似的,有两个不同: ①位段的成员必须是 int、unsigned
2023-06-29

C#的枚举与位枚举怎么定义

这篇文章主要介绍了C#的枚举与位枚举怎么定义的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#的枚举与位枚举怎么定义文章都会有所收获,下面我们一起来看看吧。一、枚举的概念C# 枚举(Enum), 枚举类型是用于
2023-06-27

c语言中如何自定义结构体、位段和枚举

这篇文章主要介绍了c语言中如何自定义结构体、位段和枚举的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇c语言中如何自定义结构体、位段和枚举文章都会有所收获,下面我们一起来看看吧。结构体类型创建:struct St
2023-06-17

C语言枚举与联合图文梳理讲解

枚举顾名思义就是把所有的可能性列举出来,像一个星期分为七天我们就可以使用枚举,联合体是由关键字union和标签定义的,和枚举是一样的定义方式,不一样的是,一个联合体只有一块内存空间,什么意思呢,就相当于只开辟最大的变量的内存,其他的变量都在那个变量占据空间
2023-01-17

C语言如何实现枚举与指针

这篇文章主要介绍“C语言如何实现枚举与指针”,在日常操作中,相信很多人在C语言如何实现枚举与指针问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现枚举与指针”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-16

C语言的枚举如何使用

这篇文章主要介绍“C语言的枚举如何使用”,在日常操作中,相信很多人在C语言的枚举如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的枚举如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!概述
2023-06-30

详解Python枚举的定义与用法

这篇文章主要介绍了详解Python枚举的定义与用法,在Python中,枚举和我们在对象中定义的类变量时一样的,每一个类变量就是一个枚举项,需要的朋友可以参考下
2023-05-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录