第20讲 位运算 位段 枚举变量 大型程序开发
第20讲 位运算 位段 枚举变量 大型程序开发
例1:读程序功能? include <stdio . h> void maino 位运算符,转换 成二进制再运算 <> short a b prnr("请肯输入一个十六进步x:n) scanf( %",&a) b=(a&0xFF0O)>38 rinf("result=% x"bY. 思考题:如何编写 个函数,求出一 int nth bi( int x int n)∥/求x的第n位 return( x &(int)pow(2, n))>>n
2 例1:读程序功能? #include<stdio.h> void main() { short a,b; printf("请输入一个十六进制数:\n"); scanf("%x",&a); b=(a & 0xFF00)>>8; printf("result=%x\n",b); } 输出一个整型数据的高8位 ▪位运算符,转换 成二进制再运算 ▪& | << >> •思考题:如何编写 一个函数,求出一 个整数的任意一位。 int nth_bit(int x,int n)//求x的第n位 { return ( x & (int)pow(2,n) )>>n; }
位段 当为变量a分配内存空 间时,按后边指定的二 struct birthday 进制位数分配。即a共 获得5+4+13= 24bits/8=3 bytes空间, unsigned int day: 5 比不指定具体位数少用 了3个字节的空间,这 unsigned int month: 4 种方法可以有效地节省 内存。 unsigned int year: 13
3 位段 struct birthday { unsigned int day:5; unsigned int month:4; unsigned int year:13; }a; •当为变量a分配内存空 间时,按后边指定的二 进制位数分配。即a共 获得5+4+13= 24bits/8=3bytes空间, 比不指定具体位数少用 了3个字节的空间,这 种方法可以有效地节省 内存
例3:袋中有红、白、蓝三种颜色的 球,有放回地取出时,结果都是? include<stdio.h> *define COLORNUM 3 char * col[COLORNUM]=["red","write","blue"3: void mainO int i,j, k enum COLOR color printf"result: \n) for(i=0;<=2;i++)/从0到2穷举 forj=0<=2j*+)从0到2穷举 for(k=0k<=2k++)/从0到2穷举 printf( %s\t%s\t%s\t -Ⅶr",co[叮co[j],col[k) printf yod\thd\t%d\n", i.j. k):
4 例3:袋中有红、白、蓝三种颜色的 球,有放回地取出时,结果都是? #include<stdio.h> #define COLORNUM 3 char *col[COLORNUM]={"red","write","blue"}; void main() { int i,j,k; enum COLOR color; printf("result:\n"); for(i=0;i<=2;i++) //从0到2穷举 for(j=0;j<=2;j++) //从0到2穷举 for(k=0;k<=2;k++) //从0到2穷举 { printf("%s\t%s\t%s\t---\t",col[i],col[j],col[k]); printf("%d\t%d\t%d\n",i,j,k); } }
定义枚举类型 enum Color 方法二 同时指定这种类型的变量可 include<stdio . h> 以取得的值,其中的每一个 *define COLORNUM 3 值其实就是一个符号常量, 如果不指定他们的值,默认 enum Color[red write, blue: 是0,1,2。。。 pedef enum Color COLOR; char co[COLORNUM]=["red",wt定义枚举类型的变量 void maino 对枚举变量进行穷举 COLOR i,j, k 好处:直观 printf"result: n"i for(i=red;i<=blue;i++)/从red到bue穷举 for(j=red:j<=blue:j*+)∥从red到bue穷举 for(k=red:k<=blue:k++)∥/从red到bue穷举 printf %s\t%s\t%s\t---\t",co[], co[jl., col[k]): printf %\t %d\t'%d\n",i,jk):
5 方法二 #include<stdio.h> #define COLORNUM 3 enum Color{red,write,blue}; typedef enum Color COLOR; char *col[COLORNUM]={"red","write","blue"}; void main() { COLOR i,j,k; printf("result:\n"); for(i=red;i<=blue;i++) //从red到blue穷举 for(j=red;j<=blue;j++) //从red到blue穷举 for(k=red;k<=blue;k++) //从red到blue穷举 { printf("%s\t%s\t%s\t---\t",col[i],col[j],col[k]); printf("%d\t%d\t%d\n",i,j,k); } } •定义枚举类型enum Color •同时指定这种类型的变量可 以取得的值,其中的每一个 值其实就是一个符号常量, 如果不指定他们的值,默认 是0,1,2。。。 •定义枚举类型的变量 •对枚举变量进行穷举 •好处:直观