当前位置: 首页 > news >正文

C语言 --- 枚举、位运算

(一)枚举

1.概念:枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围

2.作用:a.提高代码可读性;b.提高代码的安全性

3.枚举类型:

enum 枚举名

{

        列举各种值   //枚举元素或枚举常量

};

注意:列举各种值之间用逗号隔开,不需要写类型名。

eg:

enum fire

{

        LITTLE_FIRE,

        MIDDLE_FIRE,

        LARGE_FIRE,  //这个逗号加不加都没什么影响

};

注意:
(1)表示定义了一个枚举类型。

(2)枚举中逐个列举的值,默认是从0开始的。如果有给定的值,则后续没有给值的枚举成员依次加1

(3)枚举类型是基本类型,本质上是一个 int 类型 的数据。

(4)枚举类型的变量与整型变量是通用的。

(5)与宏定义对比:

①使用阶段不同:a.宏定义---预处理阶段;b.枚举---编译阶段要检查语法,运行阶段要

参与代码运行。

②可读性:都提高了可读性,枚举更能说明有相关性的一些值间关系。

(二)typedef

type define 本意不是定义类型,而是给类型起别名

eg:

(1)int a;  //定义了一个int型变量a

         typedef int a;  //此时a 是int 类型的一个别名

(2)struct stu 

        {

        };

        struct stu s;

        typedef struct stu stu_t;

        stu_t s;

(三)位运算

位运算是可以直接操作二进制位

注意:浮点数不能做位运算

&:位运算中的与运算。 一假则假      //清0

eg:

0xaa

1010  1010

0011   0011  &

-----------------------

0010   0010             ----->0x22

|:或运算,一真则真        //置1

eg:

0xaa

1010  1010

0011   0011  |

-----------------------

1011   1011             ----->0xbb

~:取反,真假相对
^:异或

相同位0,不同为1    ①加密 ②实现两个数的交换

eg:

1010   1010

 0011   0011  ^

------------------------

 1001   1001          ------->0x99

a = a^b;

b = a^b;

a = a^b;

<<:左移

a<<n       //表示将 a 这个数据左移 n 位,左移1位相当于乘2

注:  最低位补0

>>:右移

a>>n       //表示将 a 这个数据右移 n 位,右移1位相当于除以2

注:  

(1)算术右移:看符合位,看数据类型

如果是有符号类型的数据,右移时,最高位补符号位;

如果是无符号类型的数据,右移时,最高位补0。

(2)逻辑右移:不管数据的符号,直接在左边补 0。

(四)补充

1.函数指针

(1)函数指针是指向函数的指针变量。它存储了函数的入口地址,通过函数指针可以调用所指向的函数。

(2)声明形式:  返回值类型 (*指针变量名)(参数列表) 

(3)函数指针的主要用途包括实现函数回调、动态选择要执行的函数、提高代码的灵活性和可扩展性等。

2.指针函数

(1)指针函数是指返回值为指针类型的函数。

(2)声明形式:返回值类型 *函数名(参数列表)

(3)例如,一个指针函数可能返回一个指向动态分配内存的地址,或者返回一个指向数组的首地址等。

3.堆的空间

堆是动态内存分配区域,程序可以在运行时根据需要手动请求和释放堆内存。

void *malloc (size_t size);

(1)功能:在堆上开辟出一块连续的空间

(2)参数: size   ------   表示申请的空间的大小,单位字节

(3)返回值:成功----返回申请到的内存空间的地址; 失败----返回NULL

void free(void *ptr);

(1)功能:释放之前申请的堆上的空间

(2)参数:ptr  是之前申请到的堆上的空间的地址

(3)free释放后的空间:①一般不再使用;②指向这块空间的指针是个野指针;③free 之后对应的空间上的内容也不要使用。

注意:

a.这两个函数是成对出现的。

b.free 只是释放了空间,但这个空间上的数据不会被清零

c.不要在一个函数中多次使用free函数。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 电机学习-基础知识
  • AR技术:汽车行业创新发展的新动力
  • Grafana 可视化监控和告警
  • 28. 找出字符串中第一个匹配项的下标【 力扣(LeetCode) 】
  • 【知识点介绍】时钟置换算法(CLOCK算法)
  • 【python学习】深入解析 `jq` 库:JSON 处理的利器
  • 数据库(一):MySQL概述
  • Spring Boot + Vue 跨域配置(CORS)问题解决历程
  • 构建智能生态,视频监控/安防监控EasyCVR视频汇聚流媒体技术在智能分析领域的应用
  • 《TOGAF®标准第10版》:企业架构新时代的必备指南与实践蓝图
  • JS【详解】 延迟加载
  • 阿里云服务器 ECS部署jenkins
  • 《企业净零排放实用手册》:助力中小企业实现“双碳”目标
  • 工业智能网关在汽车制造企业的应用价值及功能-天拓四方
  • EVAL长度突破限制
  • [译]CSS 居中(Center)方法大合集
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • angular学习第一篇-----环境搭建
  • Java 内存分配及垃圾回收机制初探
  • Java多态
  • Java教程_软件开发基础
  • jdbc就是这么简单
  • laravel with 查询列表限制条数
  • LeetCode算法系列_0891_子序列宽度之和
  • mongo索引构建
  • Mysql5.6主从复制
  • oldjun 检测网站的经验
  • SQLServer之创建显式事务
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 和 || 运算
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 简单数学运算程序(不定期更新)
  • 七牛云假注销小指南
  • 项目管理碎碎念系列之一:干系人管理
  • MPAndroidChart 教程:Y轴 YAxis
  • ​如何在iOS手机上查看应用日志
  • #{}和${}的区别?
  • #define,static,const,三种常量的区别
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四) Graphivz 颜色选择
  • (算法)Game
  • (原)本想说脏话,奈何已放下
  • *p++,*(p++),*++p,(*p)++区别?
  • .dwp和.webpart的区别
  • .Net Remoting常用部署结构
  • .sh 的运行
  • :class的用法及应用
  • @Autowired 和 @Resource 区别的补充说明与示例
  • [ C++ ] STL_list 使用及其模拟实现
  • [C++]: 模板进阶