共用体:
union 共用体名
{
数据类型1 成员变量1;
数据类型2 成员变量2;
数据类型3 成员变量3;
...
};
共用体所有成员变量共享同一片空间
#include <stdio.h>
union u
{
char a;
short b;
int c;
};
int main(void)
{
union u u1;
u1.a = 'A';
printf("%c\n", u1.a);
u1.b = 20;
printf("%d\n", u1.b);
u1.c = 50;
printf("%d\n", u1.c);
printf("%d\n", u1.b);
return 0;
}
内存大小端:
1.内存小端:
内存低地址存放低数据位
内存高地址存放高数据位
2.内存大端:
内存低地址存放高数据位
内存高地址存放低数据位
利用typedef函数声明:
用来声明新的类型名来达到给予类型的作用
typedef int I //I不是变量而是拥有int定义作用的新的类型名
typedef int ARRAY[10] //ARRAY可以定义长度为十的一维整型数组
枚举:
enum 枚举类型名
{
枚举常量1,
枚举常量2,
枚举常量3,
..
};
注意:
1.枚举类型一般说明将来变量的值在给定的常量中选择其一作为它的值
2.枚举常量的值总是前一个枚举常量的值+1,第一个默认为0值
3.枚举常量默认为int类型,可以直接在程序中使用
#include <stdio.h>
enum weekday
{
Monday = 1,
Tuesday,
Wednesday,
Thurday,
Friday,
Saturday,
Sunday
};
int main(void)
{
enum weekday day;
printf("请输入今天星期几:\n");
scanf("%d", (int *)&day);
switch (day)
{
case Monday:printf("1和6限号!\n");break;
case Tuesday:printf("2和7限号!\n");break;
case Wednesday:printf("3和8限号!\n");break;
case Thurday:printf("4和9限号!\n");break;
case Friday:printf("0和5限号!\n");break;
case Saturday:
case Sunday:printf("不限行!\n");
}
return 0;
}
位运算:
& 按位与
| 按位或
^ 按位异或 相同为0 相异为1
~ 按位取反
>> 右移 右移n位 等价于 让该数 / 2^n
<< 左移 左移n位 等价于 让该数 * 2^n
(1)按位异或实现数据交换:
a = a ^ b;
b = a ^ b;
a = a ^ b;
#include <stdio.h>
int main(void)
{
int a = 100;
int b = 200;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d, b = %d\n", a, b);
return 0;
}
(2)将变量的第n位置0:
num = num & ~(1 << n)
(3)将变量的第n位置1:
num = num | (1 << n)