第9讲位运算枚举类型定义与编译预处理.pps

上传人:本田雅阁 文档编号:2259880 上传时间:2019-03-12 格式:PPS 页数:26 大小:1.38MB
返回 下载 相关 举报
第9讲位运算枚举类型定义与编译预处理.pps_第1页
第1页 / 共26页
第9讲位运算枚举类型定义与编译预处理.pps_第2页
第2页 / 共26页
第9讲位运算枚举类型定义与编译预处理.pps_第3页
第3页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第9讲位运算枚举类型定义与编译预处理.pps》由会员分享,可在线阅读,更多相关《第9讲位运算枚举类型定义与编译预处理.pps(26页珍藏版)》请在三一文库上搜索。

1、Page 1,第九讲 位运算 枚举 类型定义 编译预处理,参考书C程序设计 第八章、第十一章、第十章:10.9、10.10,Page 2,本讲主要内容,信息表示与存储 位运算 位字段结构体 枚举类型 类型定义 编译预处理,信息的表示与存储 二进制的编码表示,问题的提出: 负数的表示方法 0的表示方法 解决方案之一:原码 符号绝对值表示 +0101011的原码:00101011 -0101011的原码:10101011 问题:0的表示不唯一 +0:00000000,-0:10000000,信息的表示与存储 二进制的编码表示,解决方案之二:补码 求补码的方法 正数:同原码 负数: 求反,产生中间码

2、反码 (符号位不变,其他位求反) 末位加1 补码的运算规则 符号位直接参加运算,最高位进位自然丢失?(将减法转换成了加法),信息的表示与存储 定点数与浮点数,定点数 小数点固定在某一位置上 机器数的浮点表示 由阶符、阶码、尾符、尾数组成,Page 6,位运算按位与(&),运算规则 将两个运算量的每一个位进行逻辑与操作。 举例:计算 3 ,Page 7,位运算按位或(|),运算规则 将两个运算量的每一个位进行逻辑或操作。 举例:计算 3 | 5 先将 3 和 5 表示为补码,再按位或: 3: 0 0 0 0 0 0 1 1 5:(|) 0 0 0 0 0 1 0 1 3 | 5: 0 0 0 0

3、 0 1 1 1 用途: 将某些位置1,其它位不变。 例如:将 int 型变量 a 的低字节置 1 : a = a | 0xff;,Page 8,位运算按位异或(),运算规则 两个操作数进行异或:若对应位相同,则结果该位为 0, 若对应位不同,则结果该位为 1。 举例:计算 071052 071: 0 0 1 1 1 0 0 1 052:() 0 0 1 0 1 0 1 0 071052 : 0 0 0 1 0 0 1 1 用途: 使特定位翻转(与0异或保持原值,与1异或取反)。 例如:要使 01111010 低四位翻转: 0 1 1 1 1 0 1 0 () 0 0 0 0 1 1 1 1

4、0 1 1 1 0 1 0 1,Page 9,位运算取反(),单目运算符:对一个二进制数按位取反。 例1:025:0000000000010101 025:1111111111101010 例2:将 int 型数据 a 最低位置 0: a=a&1 (1是:11.10) (当a是16位或32位整数时都适用),例 1,例 2,Page 10,例1 按位取反,main() unsigned char a,b; a=0x9a; b=a; printf(“a:%xnb:%xn“,a,b); ,运行结果: a: 9a b: 65,Page 11,例2 位逻辑运算,#include main() unsig

5、ned char a,b; a=0xb9; b=0x83; printf(“a AND b:%xn“,a ,运行结果: a AND b:81 a OR b:bb a NOR b:3a,Page 12,位运算移位,左移运算() 右移后,低位舍弃, 高位:无符号数补0 有符号数补0(逻辑右移) 补“符号位”(算术右移),例 3,例 4,例5,Page 13,例3 移位-左移,main() unsigned char a,b; a=0x1b; b=a2; printf(“0x%x Lift shift 2 bit:0x%xn“,a,b); ,运行结果: 0x1b Lift shift 2 bit:0

6、x6c,Page 14,例4 移位-右移,main() char a=-8; unsigned char b=248; printf(“signed a Right_shift 2 bit:%dn“,a2); printf(“unsigned b Right_shift 2 bit:%dn“, b2); ,运行结果: signed a Right_shift 2 bit:-2 unsigned b Right_shift 2 bit:62,Page 15,例5,题目: 用十位二进制形式输出一个无符号整数。 分析 屏蔽字最高位1,其余位为0。 Value不断左移,逐个与屏蔽字按位“与”,结果非0

7、时最高位为1,否则为0,逐位输出。,Page 16,例5,#include main() unsigned x; void displaybits(unsigned); printf(“Enter an unsigned integer:“); scanf(“%u“, /*调用子函数,逐位输出二进制位*/ ,Page 17,例5,void displaybits(unsigned value) unsigned i, displaymask=115; printf(“%7u= “,value); for(i=1;i=16;i+) value ,输入:250 输出:250= 00000000 1

8、1111010,Page 18,位字段结构体,概念 特殊形式的结构体,成员项是二进制位字段。 几点说明: P266267,Page 19,枚举类型,将需要的变量值一一列举出来,构成一个枚举类型。 enmu 枚举类型名 变量值列表; 例如: enum weekday sun,mon,tue,wed,thu,fri,sat; 说明: P247 应用举例 P248 例10.12,Page 20,类型定义,给类型定义一个新的名字 typedef 已定义过的类型名 新类型名; 例:,struct person char name20; char address100; char tel20; typed

9、ef struct person PERSON;,或: typedef struct person char name20; char address100; char tel20; PERSON;,Page 21,编译预处理文件包括,#include 编译系统按系统设定的标准目录搜索包括文件。 #include “包括文件路径名“ 编译系统按指定路径搜索。 未指定路径名时,首先在当前目录中搜索, 找不到时,再按系统设定的标准目录搜索包括文件。,Page 22,编译预处理宏定义,定义符号常量 定义带参数的宏 例1:#define POWER(X) (X)*(X) 在程序中使用时: z=POWE

10、R(x+y); 编译时替换为: z=(x+y)*(x+y); 例2:#define POWER(X) X*X 在程序中使用时: z=POWER(x+y); 编译时替换为:z=x+y*x+y;(运算顺序不对) 说明 宏只是表达式的运算,不象函数调用需要进行控制转移。 其数据类型随实参不同而不同。形参及结果无固定类型。 不存在参数传递,具有较高的执行速度,但占内存较多。,例 6,Page 23,例6 宏定义的使用,#define NL printf(“n“) #define PRINT(F,V) printf(#V#“=%“#F“t“,V) #define PRINT1(F,X1) PRINT(F

11、,X1);NL #define PRINT2(F,X1,X2) PRINT(F,X1);PRINT(F,X2);NL main() int a1,a2,a3,a4; float r1,r2,r3,r4; long i,j; char n,m;,Page 24,例6 宏定义的使用,a1=1; a2=2; a3=3; a4=4; r1=1.5; r2=2.5; r3=3.5; r4=4.5; i=10; j=100; n=X; m=Y; PRINT(d,a1); PRINT1(d,a1); PRINT2(d,a1,a2); PRINT2(d,a3,a4); PRINT2(f,r1,r2); PRINT2(f,r3,r4); PRINT2(ld,i,j); PRINT2(c,n,m); ,Page 25,例6 宏定义的使用,运行结果: a1=1 a1=1 a1=1 a2=2 a3=3 a4=4 r1=1.500000 r2=2.500000 r3=3.500000 r4=4.500000 i=10 j=100 n=X m=Y,Page 26,作业,复习 C程序设计 第八章、第十一章、第十章:10.9、10.10 P267 11.1, 11.3 预习 C程序设计 第十二章,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1