C语言共用体、枚举与位运算
一、共用体联合体union结构体每个成员占据独立空间。共用体所有成员共享同一块内存空间同一时间只能使用其中一个成员。共用体所占内存大小等于内部最大成员的字节数。大小端小端内存低地址存放数据低位内存高地址存放数据高位PC 常用大端内存低地址存放数据高位内存高地址存放数据低位网络、单片机c运行union Data { char c; int i; };利用共用体判断大小端示例c运行void check_endian(void) { union Data u; u.i 0x01020304; if(u.c 0x04) printf(小端\n); else printf(大端\n); }二、枚举 enumc运行enum weekday { MONDAY 1, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY };每个枚举常量本质是 int 类型。如果不手动赋值第一个常量默认值为 0后面每一个在前一个基础上 1。可以手动指定某个枚举的值后续常量自动递增。c运行int main(void) { printf(%d, MONDAY); return 0; }三、位运算1. 位运算符按位与|按位或^按位异或~按位取反左移右移2. 常用位运算操作c运行// 将变量第n位置1 num | (1 n); // 将变量第n位置0 num ~(1 n); // 异或交换两个变量不使用临时变量 a a ^ b; b a ^ b; a a ^ b;完整小测试代码c运行#include stdio.h int main(void) { int num 0; num | (1 2); printf(置1:%d\n, num); num ~(1 2); printf(置0:%d\n, num); int a 3, b 5; a a ^ b; b a ^ b; a a ^ b; printf(a%d b%d\n, a, b); return 0; }速记struct成员各占各内存union成员共用一块内存enum 本质 int可手动设置起始值后续自动 1位运算或置 1与清 0异或可以交换数字