欢迎光临
我们一直在努力

day 16 C语言核心:共用体、枚举与位运算详解

一、共用体

共用体的概念:有时需要使几种不同类型的变量存放到同一段内存单元中。例如,可把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中(见图11-24)。以上3个变量在内存中占的字节数不同,但都从同一地址开始。

关键字: union(struct使用方法类似)

stepl定义一个类型—共用体类型

step2定义变量,数组,指针

union demo
{
int a;
short b;
char c;
};//共用体类型

1.共用体的空间大小 == 等于最大的成员的大小,默认对齐。

2.共用体初始化默认是给到第一个成员的——按第一个成员的方式进行初始化

3.各个成员的起始位置一样根据各个成员的类型大小,拿到的字节数(空间大小)是不一样的

4.如果对共用体多次赋值每个成员,只能影响到自己对应的空间,最终赋值的结果是多次赋值后的     综合结果。

5.通过union本身特点实现大小端判断?

int isLIttleEndian(void)
{
union demo
{
int a;
char b;
}d = {1};
return d.b;
}

6.用途:a.节省空间   b.协议很多字段,都是用共用体来实现空间的公用    c.实现数据转换

二、枚举类型的基本概念

枚举(Enumeration)如果一个变量只有几种可能的值,则可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内,通过enum关键字定义,可以提高代码的可读性和可维护性。用宏定义,通过将一些常量表示为符号。

enum 枚举名
{ 枚举元素1, 枚举元素2, …
};

注意:

1.枚举类型:在C语言,本质上是用整型来处理的,枚举值–标识符,默认从0开始,依次往后(每个比前一个大1)。

2.枚举类型的变量的取值范围本质上,只要是整数,都可以接收,只是我们在使用时,一般,只是用,定义在枚举类型中的值。

3.枚举类型的值也可以指定。

4.枚举是编译时处理,有类型,宏定义是预处理阶段,无类型只是文本替换。枚举把相关的值集合起来更可读,宏定义没有这样的效果。

5.枚举有类型,可以做类型检查。

6.用枚举来定义常量

#define ARRAYSIZE 10
enum
{
ARRAYSIZE=10,
};//定义了一个符号常量

typedef :type define//给已有类型起别名

typedef int a//此时给int起了一个别名–别名就叫a
typedef struct
{
charname[10];
intage;
}stu_t;
struct stu s; == stu_t s;

三、位运算

所谓位运算是指进行二进制位的运算。在系统软件中,常要处理二进制位的问题,例如,将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。C语言提供位运算的功能,与其他高级语言(如PASCAL)相比,它显然具有很大的优越性。

位–二进制位

通过软件控制硬件:通过位运算–实现二进制位的操作影响的起始就是二进制位的状态。

&:   与运算(一假则假)           用途:清零。

 |:   或运算(一真则真)            用途:置1。

~:   取反运算(真假相对)        用途:实现两个数交换。

^:   异或运算(相同为0,不同为一)

<<: 左移;将二进制位向左移动指定位数,低位补0。

>>: 右移;将二进制位向右移动指定位数,逻辑右移(无符号)最高位补0;

                   算术右移(有符号)最高位补符号位。

不借助第三方变量实现两个数交换
a = a + b;
b = a – b;
a = a – b;
异或实现交换
a = a ^ b;
b = a ^ b;
a = a ^ b;

注意:

1.位运算不支持浮点数据。

2.左移一位相当于乘以2。

3.每右移一位相当于除以2.

循环左移:
#include <stdio.h>
int main()
{
int a = 0xf0000000;
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
if((a & 1<< 31) !=0)
{
a = (a << 1) + 1;
}else
{
a = a << 1;
}
}
printf("a = %#x\\n",a);
return 0;
}

总结C语言重点:

重要点:

1.隐式类型转换

2.不同精度混合赋值

3.数组理解数组特点掌握数组算法

a.找数

b.找极值

c.逆序

d.排序选择冒泡插入快速排序

e.二分找字符串

理解字符串:gets; puts ;strlen; strcpy / strncpy ;strcat / strncat ;strcmp / strncmp。

二维数组理解本质

4.函数:函数的定义;函数的声明;函数的调用;函数递归调用。

存储类别的关键字—关键字:static   extern   register  auto

5.指针:指针概念;指针定义;指针引用(*p);指针运算(p++,p+n,p-q,关系运算)。

指针 + 数组:一维;二维;

指针数组—–数组

数组指针—–指针

指针+函数:函数 (的)指针——回调;指针 (的)函数——-返回值为指针

指针+指针:多级指针。

特殊的指针:野指针;NULL; void * //空类型指针

赞(0)
未经允许不得转载:171主机测评 » day 16 C语言核心:共用体、枚举与位运算详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址