Download presentation
Presentation is loading. Please wait.
1
浙江长征职业技术学院-计算机应用系-相方莉制作
3.4 知识扩展 3.4.1 条件运算符 [1] 一般格式: 表达式1?表达式2:表达式3 条件表达式中的“表达式1”、“表达式2”、“表达式3”的类型,可以各不相同 [2] 运算规则 如果“表达式1”的值为非0(即逻辑真), 则运算结果等于“表达式2”的值; 否则,运算结果等于“表达式3”的值 浙江长征职业技术学院-计算机应用系-相方莉制作
2
浙江长征职业技术学院-计算机应用系-相方莉制作
条件运算符 是 考试是 否及格? ? 不是 真 表达式 1 表达式 2 ? 条件表达式 假 浙江长征职业技术学院-计算机应用系-相方莉制作
3
浙江长征职业技术学院-计算机应用系-相方莉制作
3.4.1 条件运算符 [3] 运算符的优先级与结合性 条件运算符的优先级,高于赋值运算符, 但低于关系运算符和算术运算符。 其结合性为“从右到左”(即右结合性) 浙江长征职业技术学院-计算机应用系-相方莉制作
4
浙江长征职业技术学院-计算机应用系-相方莉制作
补充案例 [例] 从键盘上输入2个整数,输出其中的最大值。 #include “stdio.h” main() { int a,b,max; printf(“请输入2个整数: "); scanf("%d%d",&a,&b); max=(a>b) ? a : b; printf(“您输入的2个数的最大值为%d\n",max); } #include “stdio.h” main() { int a,b,max; printf(“请输入2个整数: "); scanf("%d%d",&a,&b); if(a>b) max=a; else max=b; printf(“您输入的2个数的最大值为%d\n",max); } 浙江长征职业技术学院-计算机应用系-相方莉制作
5
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.1 条件运算符 if语句与条件运算符 如果if语句的形式如下所示: if(表达式1) x=〈表达式2〉; else x=〈表达式3〉; 无论表达式1为“真”还是为“假”,都只执行一个赋值语句且给同一个变量赋值。可以利用条件运算符,将这种语句简单地用如下语句来表示。 x=〈表达式1〉?〈表达式2〉:〈表达式3〉; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
6
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
逗号运算及其表达式 C语言提供一种用逗号运算符“,”连接起来的式子, 称为逗号表达式。逗号运算符又称顺序求值运算符。 (1) 一般形式:表达式1,表达式2,……,表达式n. (2) 求解过程:自左至右,依次计算各表达式的值, “表达式n”的值即为整个逗号表达式的值。 例如: 逗号表达式“a=3*5,a*4”的值=60 逗号表达式“(a=2+1,a*5),a+8”的值=11 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
7
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 位运算的定义 程序中所有的数据在内存中都是以二进制的形式存储的,位运算就是直接对内存中的二进制位进行运算。C语言提供了常用的位运算功能,虽然不如汇编语言丰富,但这使得C语言也能像汇编语言一样用来编写系统程序。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
8
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 一、 位 运 算 符 运 算 符 含义 表达式举例 优先级 ~ 按位取反 ~a 1(高) << 左移 a<<2 2 >> 右移 a>>2 & 按位与 a&b 3 ^ 按位异或 a^b 4 | 按位或 a|b 5(低) 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
9
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 二、 扩展的赋值运算符 扩展运算符 含义 表达式举例 与之等价的表达式 <<= 左移 a<<=n a=a<<n >>= 右移 b>>=n b=b>>n &= 按位与 a&=b a=a&b ^= 按位异或 a^=b a=a^b |= 按位或 a|=b a=a|b 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
10
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 一、按位与运算符 & 按位与运算符“&”是双目运算符。 1. 运算性质 参与运算的两数对应二进制位相与,即两个二进位均为1时,结果位才为1,否则为0。 例如,表达式3和9的与运算过程如下(3、9对应的二进制分别为 和 ) & 1 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
11
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 一、按位与运算符 & 2. 使用格式为:x&y 以上例子,3和9与运算的测试程序如下: void main() { int a=3,b=9,c; c=a&b; printf("a=%d,b=%d,c=%d",a,b,c); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
12
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 3. 与运算&的主要用途 通常用来对一个数的某些位清0或保留某些位。 如果某些位需要清0,则该数与一个对应的清0位为0,其余位为1的数相与;如果要保留某些位,则将该数与一个对应保留位为1,其余位为0的数相与。 例如,把短整型变量x的高8位清0,保留其低8位,可作x&255运算(255的二进制数为 )。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
13
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 二、按位或运算符| 按位或运算符|是双目运算符。 1. 运算性质 其功能是参与运算的两数对应的二进位相或,即对应的两个二进位有一个为1时,结果位就为1,否则为0。 例如,表达式3|9的运算过程如下: | 1 1 1 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
14
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 二、按位或运算符| 2. 使用格式为: x|y 3和9或运算的测试程序如下: void main() { int a=3,b=9,c; c=a|b; printf("a=%d,b=%d,c=%d",a,b,c); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
15
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 二、按位或运算符| 3. 或运算|的主要用途 通常用来对一个数中的某些位置1。 即将该数与一个对应置1位为1, 其余位为0的数相或。 例如,若想使短整型变量x中低4位置1,其它位保持不变,可采用表达式: x = x|15 (15的二进制数为 )。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
16
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 三、按位异或运算符^ 按位异或运算符^是双目运算符。 1. 运算性质 参与运算的两数对应的二进位相异或, 即对应的两个二进位不同则结果为1,否则为0。 (异1,同0) 例如,表达式3和9的异或运算过程如下: ^ 1 1 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
17
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 三、按位异或运算符^ 2. 使用格式为:x^y 3和9异或运算的测试程序如下: void main() { int a=3,b=9,c; c=a^b; printf("a=%d,b=%d,c=%d",a,b,c); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
18
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 三、按位异或运算符^ 3. 异或^的主要用途 通常用来对一个数中的某些位取反 (即1变0,0变1)。 即将该数与一个对应取反位为1, 其余位为0的数相异或。 例如:若想使短整型变量x中低8位取反, 其它位保持不变,可采用表达式: x = x|255 (255的二进制数为 )。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
19
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 四、位取反运算符~ 取反运算符“~”为单目运算符,具有右结合性。 1.运算性质:对参与运算的数对应的二进位按位取反,即二进位上的0变1,1变0。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
20
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 四、位取反运算符~ 2.使用格式为:~x 例如,表达式~9的运算如下: ~ 结果为: 3. ~的主要用途: 通常用来对一个数按位取反(即1变0,0变1)。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
21
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 五、位左移运算符<< 左移运算符<<是双目运算符 。 1.运算性质:将x左移n位,高位丢弃,低位补0。参与运算的数以补码方式出现。 2.使用 格式为:x<<n 例如,若想使短整型变量x左移2位,即通过x<<2运算把x的各二进位向左移动2位。如x= (十进制6),左移2位后为 (十进制24)。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
22
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 五、位左移运算符<< 3. <<的主要用途:左移时,每左移一位,相当于移位对象乘以2。某些情况下,可以利用左移的这一特性代替乘法运算,以加快乘法速度。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
23
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 六、位右移运算符>> 右移运算符“>>”是双目运算符 。 1.运算性质:将x右移n位,低位丢弃,对于无符号整数和正整数,高位补0;对于负整数,最高位是补0或是补1取决于编译系统的规定,VC++ 6.0规定为高位补1。参与运算的数以补码方式出现。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
24
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 六、位右移运算符>> 2.使用格式为:x>>n 例如,x>>2指把x的各二进位向右移动2位。 1)如x= (十进制16),右移2位后为 (十进制4); 2)若x= (作为带符号数时为十进制-16),右移2位后为 (十进制-4); 3)若x= (作为无符号数时为十进制240),右移2位后为 (十进制60)。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
25
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 六、位右移运算符>> 3. >>的主要用途: 右移时,若右端移出的部分不包含有效数值1,则每右移一位,相当于移位对象除以2。某些情况下,可以利用右移的这一特性代替除法运算。如果右端移出的部分包含有效二进制数1,这一特性就不适用了。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
26
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
3.4.3 位运算符与位运算 六、位右移运算符>> 4. 注意:位数不同的运算数之间的运算规则:当两个运算数类型不同时位数亦会不同。遇到这种情况,系统将自动进行如下处理: (1)先将两个运算数右端对齐。 (2)再将位数短的一个运算数往高位扩充,即无符号数和正整数左侧用0补全,负数左侧用1补全,然后对位数相等的这两个运算数按位进行位运算。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
27
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
典型例题 【例1】有以下程序: #include <stdio.h> void main() { int a=5,b=1,t; t=(a<<2)|b; printf("%d\n",t); } 程序运行后的输出结果是( )。 A.21 B.11 C.6 D.1 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
Similar presentations