阅读量:0
共用体
union 共用体名
{
数据类型1 成员变量1;
数据类型2 成员变量2;
数据类型3 成员变量3;
...
};
共用体所有成员变量,所占空间重叠,占共同的空间。
枚举
将变量的值一一列举出来。
enum 枚举类型名
{
枚举常量1,
枚举常量2,
枚举常量3,
..
};
注意:
- 1.枚举类型一般说明将来变量的值在给定的常量中选择其一作为它的值
- 2.枚举常量的值总是前一个枚举常量的值+1,第一个默认为0值
- 3.枚举常量默认为int类型,可以直接在程序中使用
#include <stdio.h> enum weekday { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun, }; 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; }
利用typedef函数声明
用来声明新的类型名来达到给予类型的作用
typedef int I //I不是变量而是拥有int定义作用的新的类型名 typedef int ARRAY[10] //ARRAY可以定义长度为十的一维整型数组
位运算
位运算符
位运算(所有位运算要操作数的类型是与整形或者整形兼容,或者枚举也可以;但是指针,结构体这些都不可以,不与整形兼容)
运算符 | 含义 | 运算符 | 含义 |
& | 按位与(指定位清零) | ~ | 取反 |
| | 按位或(指定位置1) | << | 左移(左移一位该数乘以2) |
^ | 按位异或(指定位翻转,同0异1) | >> | 右移(算术右移,右移一位该数除以2) |
- 位运算符中除~以外,均为二目运算符,即要求两侧各有一个运算量。
- 运算量只能是整型或字符型数据。
- 左移之后,不够补0,可以实现某一位 置1。
- 右移不够向右补0,右移分为算术右移(有符号,前面补1,也可以补0;取决于i的正负,正补 0,负补1;逻辑右移(无符号,前面补0)
位运算举例
1.按位异或实现数据交换:
a = a ^ b; b = a ^ b; a = a ^ b;
2.将能被三整除的比特位 置1.
int main(void) { unsigned int i = 0; unsigned int j = 0x422; int k; { for(k = 0;k < 32; ++k) { if(k % 3 == 0) { i |= (1 << k); } } } printf("%x\n",i); return 0; }
3.计算1的个数
int main(void) { unsigned int i = 0x3; int counter = 0; int k; for(k = 0;k < 32; ++k) { if(i & (0x80000000)) { ++counter; } i = i << 1; } printf("%d\n",counter); return 0; }