内容正文:
第三章 数据与运算
1
CONTENTS
目录
01
02
逻辑运算符与逻辑表达式
关系运算符与关系表达式
03
赋值运算符与赋值表达式
04
位运算符与表达式
05
其它运算符与表达式
06
数据类型的转换
知识树
My First Template
赋值运算符与赋值表达式
C语言程序设计
4
C语言
赋值运算符与赋值表达式
赋值运算符
简单的赋值就是把一个表达式的值赋给一个变量。
例如:
i = 5
i = j + 1
My First Template
C语言
在赋值符“=”之前加上其它运算符,可以构成复合的运算符。如: += 、 -= 、 *= 、 /= 、 %=
例如:
i + = 2 等价于 i = i + 2
a * = b + 5 等价于 a = a * (b + 5)
x% = 3 等价于 x = x%3
int x=6;
执行x+=x-=x*x;后,x的值是?
复合的赋值运算符
赋值运算符与赋值表达式
My First Template
C语言
计算过程如下:
(1) 先进行x*x的计算,结果为36
再进行x- =36的计算,相当于x=x-36=-30
最后进行x+=-30的计算,相当于x=x-30=-60
已知x=6,执行x+=x-=x*x;后,x的值是?
1、运算符的优先级 2、考虑的是运算的结合性
赋值运算符与赋值表达式
My First Template
C语言
由“=”连接的式子称为赋值表达式。其一般形式为:
变量=表达式
功能:计算表达式的值再赋予左边的变量。
例如:x=3
y=x+3
结合性:
如:a=b=c=1 可理解为:a=(b=(c=1))
从右向左
赋值表达式
赋值运算符与赋值表达式
My First Template
C语言
设原来a=12,且a和n已经定义为整型变量。计算:
1.a+=a 2. a-=12
3.a*=2+3 4.a/=a+a
a%=(n%=2),n的值等于5
a+=a-=a*=a
赋值运算符与赋值表达式
My First Template
C语言
假设变量a=3;b=7;编程实现将a,b变量的值交换,并输出a,b的值。
布置任务
赋值运算符与赋值表达式
My First Template
位运算符与表达式
C语言程序设计
11
C语言
位运算符与表达式
位运算符
为运算符包括6种:
按位与(&)
按位或(|)
按位非(~)
按位异或(^)
左移位(<<)
右移位(>>
取反(非)运算符是单目运算符,其余是双目运算符,要求符号左右两侧各有一个运算量;
位运算的运算对象只能是整型或字符型数据,而不能够是浮点型数据;
位运算的优先级从高到低依次是按位取反、移位、按位与、按位异或、按位或
My First Template
C语言
位运算符与表达式
按位取与运算(&)
按位与运算符“&”是双目运算符。其功能是参与运算的两个数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
源码就是把一个数转化为二进制(1个字节);1、对于正数,补码与原码相同;2、对于负数,数值位的绝对值取反后在最低位加1,通俗的讲就是将这个负数转换的二进制数,各位取反,末位加1。
My First Template
C语言
位运算符与表达式
按位取或运算(|)
按位或运算符“|”是双目运算符。其功能是参与运算的两个数各对应的二进位相或。只要对应的两个二进位有一个为1,结果位就为1,只有两个都为0的时候才为0。参与运算的两个数均以补码出现。
My First Template
C语言
位运算符与表达式
按位取异或运算(^)
按位异或运算符“^”是双目运算符。其功能是参与运算的两个数各对应的二进位相异或,当两对应的二进位相异时,结果为1,相同则为0。参与运算数仍以补码出现
My First Template
C语言
位运算符与表达式
左移位运算(<<)
左移运算符“<<”是双目运算符。其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0
例如:
a=3;
a<<4;
指把a的各二进位向左移动4位。如a=00000011,左移4位后为00110000(十进制48)。
需要指出的是,高位左移后溢出,舍弃不起作用。左移1位相当于该数乘以2,左移2位相当于该数乘以4,但此结论只适合该数左移时被溢出舍弃的高位中不包含1的情况。例如,假设一个字节存一个整数,若a为无符号整数,则a=64时,左移1位时溢出的是0,左移2位时,溢出的高位中包含1。
My First Template
C语言
位运算符与表达式
右移位运算(>>)
右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:
a=15;
a>>2;
表示把000001111右移为00000011(十进制3)。
说明:对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。
My First Template
C语言
位运算符与表达式
按位取反运算(~)
求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。
例如~9的运算为:
~(0000000000001001)结果为:1111111111110110
My First Template
其它运算符与表达式
C语言程序设计
19
C语言
其它运算符与表达式
1. 求字节数(长度)运算符:sizeof
2. 逗号运算符:,
3. 条件运算符(三目运算符): ? :
My First Template
C语言
其它运算符与表达式
格式:sizeof( 数据类型 ) 或 sizeof( 表达式 )
优先级:2(和++ -- -负号 !一样 高于算术运算的* /)
结合性:自右向左
例如:
• sizeof(double) 值为8
• sizeof(char) 值为1
• float f; int i, a;
i=sizeof(f); i的值将为4
i=sizeof(a); i的值将为4
用于计算被运算对象所占字节数
1. 求字节数(长度)运算符:sizeof
My First Template
C语言
• 逗号表达式的一般形式:
表达式1, 表达式2, 表达式3, ……, 表达式n
表示由左到右依次计算各表达式之值,逗号表达式之值为表达式n之值。
如:a=3*5, a*6
其它运算符与表达式
优先级: 最低
2. 逗号运算符:,
My First Template
C语言
其它运算符与表达式
#include <stdio.h>
main()
{ int x,y=7,z=4;
x=(y=y+6,y/z);
printf("x=%d
",x);
}
运行结果:x=3
例:读程序,写结果。
逗号运算符应用
My First Template
C语言
• 条件表达式的一般形式:
表达式1 ? 表达式2 : 表达式3
• 条件表达式求值过程:
表达式1
取表达式2值
取表达式3值
T
F
其它运算符与表达式
表达式1要能得到逻辑值
3. 条件运算符(三目运算符): ? :
其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。
My First Template
C语言
max=25
其它运算符与表达式
例如:int a=10,b=25;
max=a>b?a:b ;
条件运算符是一对运算符,不能分开单独使用。
My First Template
C语言
其它运算符与表达式—总结
1. 求字节数(长度)运算符:sizeof
2. 逗号运算符:,
3. 条件运算符(三目运算符): ? :
My First Template
C语言
其它运算符与表达式
读程序,写结果。
例1: a=3*5,a*4
a=3*5,a*4,a+5
例2:
int a=1, b=3, c=2, d;
d = a>b ? a : c>b ? c : b;
布置任务
My First Template
数据类型的转换
C语言程序设计
28
C语言
数据类型的转换
隐式转换
什么情况下发生
运算转换------不同类型数据混合运算时
赋值转换------把一个值赋给与其类型不同的变量时
输出转换------输出时转换成指定的输出格式
函数调用转换------实参与形参类型不一致时转换
运算转换规则:不同类型数据运算时先自动转换成同一类型
各类数据间的混合运算
隐式
显示
My First Template
C语言
double
float
long
unsigned
int
char,short
低
高
各类数据间的混合运算
转换的规则按图所示。
数据类型的转换
My First Template
C语言
int
double
double
double
double
int char float float double long int
例:10 + 'a' + i * f - d / e
数据类型的转换
My First Template
C语言
显式转换(强制转换)
一般形式:(类型名 )(表达式)
例 (int)(x+y)
(int)x+y
(double)(3/2)
(int)3.6
说明:强制转换得到所需类型的中间变量,原变量类型不变
数据类型的转换
My First Template
$$