- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
枚举类型是一种基本数据类型,而不是一种构造 类型。 位运算符只有逻辑运算和移位运算两类。位运算 符可以与赋值符一起组成复合赋值符。如 &=,|=,^=,>>=,<<=等。 利用位运算可以完成汇编语言的某些功能,如置 位,位清零,移位等。还可进行数据的压缩存储 和并行运算。 位域在本质上也是结构类型,不过它的成员按二 进制位分配内存。其定义、说明及使用的方式都 与结构相同。
2013-7-30 20
枚举变量的初始化
enum [week] { sun, mon, tue, wed, thu, fri, sat }w1,w2; w1=mon; w2=sat; printf(“%d,%d\n”,w1,w2); 则输出结果是多少?
1,6
typedef类型定义
1.含义:可以为数据类型取别名,别名的作 用和数据类型的作用一样。
15
右移运算
2013-7-30
实例:已知:int x=7,y=10,z=1;设字长为8位,求: x来自y= x&z=2
1 15 11
(0000 0111 & 0000 1010 = 0010)
(0000 0111 & 0000 0001 = 0001) (0000 0111 (0000 1010
¦y = y ¦z =
2013-7-30 10
typedef优点:
用typedef可以声明各种类型名,但不能用来定义变量。用 typedef声明数组类型,字符串类型,结构类型后,使用会 比较方便; 用typedef只是对已经存在的类型增加一个类型名,没有创 造新的类型。
使用typedef有利于程序的通用与移植。如将Int a,b,c;改为 long a,b,c;如果程序中多处用Int定义变量,则要改动多处。 如果用typedef定义类型: typedef int INTEGER;后,在程序 中所有整型变量都用INTEGER定义。改变时,只需把 typedef int INTEGER;改变为 typedef long INTEGER;即可
2013-7-30 17
运算符小结
算术运算符: +,-,*,/,% 赋值运算符: = 关系运算符: >,<,==,>=,<=,!= 逻辑运算符: &&, ||, ! 自增、自减运算符:++ ,- 位运算符:& , | , ^ , ~ , >> , << 逗号运算符: , 条件运算符: ? : 其它: *,&,( ),[ ] , . ,->,sizeof( ),(type),… 功能,优先级, 结合性 单目,双目,三目,结果
2013-7-30 14
左移运算
右移功能:把>>左边的运算数的各个二进位全部 右移若干位,由>>右边的数指定移动的位数,高 位丢弃,低位补0; 如a=16;a=a>>2;后,a=4; 如果右移时被舍弃的低位中不包含1,则右移1位 相当于除以2(缩小2倍);如000 1111>>2后变 为0000 0011,被舍弃的低位位中含有1,因此虽 右移2位,值并没有缩小4倍。而0011 0000<<2后 变为0000 1100;被舍弃的低位中不包括1,所以 值缩小4倍 如果高位为1,则右移时高位补1,高位为0,高位补 0;
2013-7-30
12
位运算
真值表 a 0 0 1 1
2013-7-30
真值表 a 0 0 1 1 b 0 1 0 1 a∧b 0 1 1 0 ~a 1 1 0 0 ~b 1 0 1 0
b a∧b a&b a¦ b 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 1
13
左移功能:把<<左边的运算数的各个二进位全部 左移若干位,由<<右边的数指定移动的位数,高 位丢弃,低位补0; 如a=3;a=a<<4;后,a=48; 如果左移时被舍弃的高位中不包含1,则左移1位 相当于乘以2(扩大2倍);如1100 0000<<2后变 为0000 0000,被舍弃的高位中含有1,因此虽左 移2位,值并没有扩大4倍。而0011 0000<<2后变 为1100 0000;被舍弃的高位中不包括1,所以值 扩大4倍
Typedef练习:
④ 定义长度为100的整型数组int a[100];的类型别名为 NUM ;并用 别名定义一个数组变量n; ⑤ 定义字符指针 char *ss的别名为 STRING ;并用别名定义两个字符指 针变量p,q。
2013-7-30 9
typedef举例:
typedef int INTEGER; INTEGER i,j;--基本类型 typedef float REAL; REAL a,b; --基本类型 typedef struct(union) ---结构体(共用体) {int month,day,yesr;} DATE; DATE birthday,*p; typedef enum date={year,month,day} DATE; DATE a=month,b=year; typedef int NUM[100]; NUM n; --数组 typedef char *STRING; STRING p,s[10]; --指针 typedef int (*POINTER)(); POINTER p1,p2;--函数指 针
2013-7-30 6
用typedef说明类型的步骤
1) 先用定义变量的方法写出定义体。 2) 把变量名换成新类型名。 3) 在最前面加上typedef。 4) 已定义完新类型名,可用此新类型 名去定义变量。
2013-7-30
7
练习
① 定义float类型的别名为 REAL;并用别名 定义两个变量a,b; ② 定义结构体struct {int month,day,yesr;} 的类型别名为DATE;并用别名定义结构 体变量birthday. ③ 定义枚举 enum date={year,month,day} 的类型别名为 DATE;并用别名定义两个 枚举变量a=month,b=year;
如果进行初始化,后面的枚举常量会以初始化的值 进行递增,直到遇到另一个枚举常量初始化为止。
枚举类型变量的定义
方法一:enum 枚举类型名 变量名表; Enum week w1,w2; 方法二:定义类型的同时定义变量 enum [week] { Sun, Mon, Tue, Wed, Thu, Fri, Sat }w1,w2;
格式: typedef 类型名 标识符; 含义:定义标识符是类型名的别名 typedef int INTEGER; INTEGER a,b,c;作用与int a,b,c;一样
枚举编程举例
口袋中有红、黄、蓝、白、黑5种颜色 的球若干个。每次从口袋中先后取出3个球, 问得到3种不同颜色的球的可能取法,输出 每种排列的情况。 球只能是5种色之一,而且要判断各球 是否同色,应该用枚举类型变量处理。 设取出的球为i,j,k。根据题意,i、j、k 分别是5种色球之一,并要求i!=j!=k。可以 用穷举法,即一种可能一种可能的试,看 哪一组符合条件。
2013-7-30 16
五. sizeof 运算符
格式:sizeof (表达式或数据类型) 功能:求运算对象在内存中所占的字节数
求: printf(“%d,%d\n”, sizeof ( int ), sizeof ( char ) );
结果:2,1 结果:10
求:printf("%d", sizeof("AST\n012\12\\"));
2013-7-30
18
运算符的优先级
括 号 ( ) [ ] . ->
单目运算 ! ~ & * - ++ --
算术运算 * / % + 位 << >>
位& | ^
关系运算 > >= < <= 逻辑运算 && | | 条件运算 ? : 赋值运算 =
== !=
2013-7-30
逗号运算 ,
19
§5 本章小结
枚举定义
枚举定义:变量的取值是有限的、固定的; 如一周只有七天,一年只有十二个月。枚 举是一个整型符号常量的集合。 枚举值默 枚举类型定义: 认值从0
如:
enum 枚举类型名 { 枚举值表 } ; 开始递增
enum week { sun, mon, tue, wed, thu, fri, sat }; enum week { sat=6,sun, mon=1, tue, wed=5, thu, fri};
2013-7-30 11
位运算 共有六种运算符
位运算符
功能
优先级
结核性
>> << & ∧ ¦ ~
按位右移(双目) 按位左移(双目) 按位与 (双目) 按位异或(双目) 按位或 (双目) 按位反 (单目)
11 11 8 7 6 14
(→) (→) (→) (→) (→) (←)
注意:1.位运算是对二进制的位进行运算 2.只能对int型、char型和long型进行位运算
x
¦0000 1010 = 1111) ¦0000 0001 = 1011)
13 (0000 0111 ^ 0000 1010 = 1101) x^y= ~x = –8 ( ~ 0000 0111 ) = 1111 1000 – x = –7 x<<2 = 28 (0000 0111 << 2 = 0001 1100) 2 (0000 1010 >> 2 = 0000 0010) y>>2 = 1 (0000 0111 >> 2 = 0000 0001) x>>2 =