一、结构体
1.声明一个结构体类型的一般形式为:
struct 结构体名 //struct关键字不能省略,结构体名可省略
{成员列表};
对成员进行声明:类型名 成员名
2.计算 sizeof(struct Students)问题
注:上图中需为8字节的整数倍,int 为4字节,0能将4整除,放入4个字节,4能将1整除,放入1个字节,5不能将2整除,往后移一位,6能将2整除,放入2个字节,一共占8个字节。
注:结构体之间不能进行比较操作
小口诀:
- 1、默认按照计算机位数对齐;64/8=8最终大小必须是8的整数倍;
- 2、从结构体中的成员中查找最大字节的成员,最终按此成员大小对齐;
- 3、把每个成员按照声明顺序依次存放入内存,偏移量/sizeof(成员)必须能够整除
二、共用体
1.赋值最后一个成员的内存,所有成员地址相同,共用一块内存空间
注:运行结果为4
2.判断计算机的存储方式
方法一:共用体
方法二:指针
3.用途:协议 彼此成员之间相互覆盖,共享同一段内存空间,提高系统效率
4.枚举:week的取值可能为其中一种,限制取值范围,其中的值可以用print("%d\n)
打印出来,可为其中变量赋值,避免枚举值重复,
5.用typedef定义类型
typede int INT;将全局变量变成数据类型的类型名
三、位运算
1.常见位运算符
注:运算量类型需为整形或者是整形相兼容型
2.& - 按位与-指定位清零
可实现点灯操作,通过电压差,将需要亮灯的地方通过&置零
int main(void)
{
unsigned char p2 = 0xAA;
p2 &= 0xB6;
printf("%X\n",p2);
return 0;
3.|-按位或-指定位置1
可实现关灯操作,通过电压差,将需要关灯的地方通过|置1
4.^-按位或-指定位翻转,其它位不变
5.~-按位取反(单目运算符)- 全翻转
6.<<-左移-末尾补0
int main(void)
{
unsigned char p2 = 0;
p2 |= (1 << 6) | (1 << 3) | (1 << 0);
printf("%X\n",p2);
return 0;
}
7.<<-右移-开头补0
注:有符号的右移为算数右移,无符号的为逻辑右移