结构体共用体枚举和位运算

const

const的不同用法:

在C语言中,const关键字用于声明一个常量。它可以用来修饰变量、指针等,表示该变量或指针的值是不可修改的。下面是一些常见的const的使用方式:

1.修饰普通变量:

const int a = 10; // 声明一个整型常量a,值为10

2.修饰指针变量(指向常量的指针):

const int *p = &a; // 声明一个指向整型常量的指针p,指向变量a的地址

3.修饰指针变量(常量指针)

int * const p = &a; // 声明一个整型常指针p,指向变量a的地址,指针本身的值不可修改

4.修饰指针变量(指向常量的常指针):

const int * const p = &a; // 声明一个指向整型常量的常指针p,指向变量a的地址,指针本身的值和指向的值都不可修改


结构体的大小:

结构体的大小是由其成员变量的大小和内存对齐规则决定的。每个成员变量在内存中的起始地址必须是其类型大小的整数倍,这样可以提高访问效率。因此,结构体的总大小可能会比所有成员变量的大小之和要大,这是因为可能存在内存对齐产生的填充字节。

结构体的对齐问题(内存对齐)

共用体:

共用体是一种数据结构,它允许多个不同类型的成员变量共享同一块内存空间。共用体的大小等于其最大成员变量的大小。共用体的作用有两个主要方面:节省空间和实现数据的转换。

Union (联合体)

共用体作用:

1.节省空间 –嵌入式开发环境(资源有限)

2.实现数据的转换

语法:

Union 标识符

{    
    Int a;
    Char b;

}:

注意:

1.花括号后有分号

2.公用初始化时,只能给一个值,默认给到第一个元素

3.各个成员起始位置相同,但是根据类型不同,能拿到的字节数不同。

4. 共用体可以赋值

   最终共用体中的值取决于最后一次给到的值,以及最后一次能影响到的字节数。

考点:

       判断大小端?

       用公用体写一个函数判断大小端 int isLittleEndian(void)

       方便类型转换

枚举

枚举是一种特殊的数据类型,它由一组命名的常量组成。如果在定义枚举时,里面的常量不赋值的话,就会默认从0开始赋值。枚举类型本质上是通过整型实现的,因此枚举类型与整型之间是通用的。使用枚举可以提高代码的可读性,并具有语法检查更严格的好处。

枚举的用法:

如果在定义枚举时,里面的常量不赋值的话,就会默认从0开始赋值。

没给的值默认从0开始递增,赋值后从赋值处开始从所赋的值递增。

枚举类型 本质上 是通过int类型实现的 ---整型的数据 --- 枚举类型于整型之间通用

枚举好处:

  1. 提高代码可读性。
  2. 有了类型,语法检查更严格

位运算

01 –二进制数据

0

1 –一位数据

位运算 – 指的是对二进制位上的数据进行运算

运算:

1.&  ---按位与运算 ---运算规则:一假则假。

例子:a = 0x 33 ;  a&0x55 

      0011 0011  

      0101 0101   =  0001 0001 // 11

2.|  ---按位或运算 ---运算规则:一真则真。

3.~  ---按位取反 ---运算规则:真假相对。

4.^  ---异或  ---运算规则:不同则真,同则假。

5.<<  左移  a<<2 a左移两位  a = 1111 1111 <<两位后a = 1111 1100

6.>>  右移  

用途:

  1. 控制某些二进制位  控制硬件。

练习:1.将a = 0xffff ffff的偶数位清零, 将b = 0x5555 5555的奇数位置1。

右移:

       操作数1>>操作数2

       操作数1 向右移 操作数2 这么多位

逻辑右移:

       操作数1 是无符号数 高位补0

算术右移

        操作数1 是有符号数 高位补1

练习:将a=1221,判断a中有几个1。

  • 40
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值