各类数值型数据间的混合运算
- 整数、实数、字符型数据 可以混合运算
10+‘a’+ 1.5 - 8765.1234 *b’ - 若参与运算量的类型不同,则先转换成同类型,然后进行运算。
- 在赋值运算中,赋值号两边量的数据类型同时,赋值号右边量的类型将转换为左边量的类型。
算术运算符和算数表达式
两个整数相除的结果为整数
- a = 5,b=3
a/b = 1
如果两个数有一个有小数,则结果为小数,
- a = 4.0,b=2
a/b = 2.0
如果除数或被除数中有一个为负值,舍入方向不固定。例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2。
% 模运算符(求余)
- %两侧均应为整型数据
- 对于求余(%)运算,运算结果与第一个数的符号相同。
#include<stdio.h>
// 即5/2= 2......1 余数为1
void main()
{
int a,b;
a = -5; // 运算结果与第一个数的符号相同
b = 2;
printf("%d",a%b); //-1
}
算数表达式和运算符的优先级与结合性
-
在表达式求值时,先按照运算符的优先级别高低次序执行。
-
算术运算符的结合方向为“自左向右”。
-
赋值运算符是“自右向左”
int a = 7;
float x=2.5,y = 4.7;
x+a%3*(int)(x+y)%2/4;
最后一个表达式的值是什么呢
2.500000
算术运算符的结合方向为“自左向右”,再结合优先级
强制类型转换
float a;
int b;
a = 5.5;
b = (int)a;
自增自减运算
++就是变量自身基础上加1;
— —就是变量自身基础上减1;
- a++; 先运算加1
#include<stdio.h>
void main()
{
int a = 5;
printf("%d",a++); //结果为5
}
- a–; 先运算减1
#include<stdio.h>
void main()
{
int a = 5;
printf("%d",a--); //结果为5
}
- ++a; 先加1后运算
#include<stdio.h>
void main()
{
int a = 5;
printf("%d",++a); //结果为6
}
- –a; 先-1后运算
#include<stdio.h>
void main()
{
int a = 5;
printf("%d",--a); //结果为4
}
- (1)自增运算符(++)和自减运算符(- -)只能用于变量,不能用于常量和表达式。如:5++、(a+b)++都不合法。
- ++和- -的结合方向是"自右向左"
赋值运算符和赋值表达式
1.赋值运算符 “=” 如 :a = 3
2.如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。
int a;
a = 6.3;
则a的值为6;
在赋值符=之前加上其他运算符。
- += a +=1 -> a = a+1
- -= a -=1 -> a = a-1
- *= a =1 -> a = a1
- /= a /=1 -> a = a/1
#include<stdio.h>
void main()
{
int a = 1;
a += 1;
printf("%d",a); //2
}
#include<stdio.h>
void main()
{
int a,b,c;
a = (b=4)+(c=6);
printf("a=%d b=%d c=%d",a,b,c); //a=10 b=4 c=6
}
逗号运算符和逗号表达式
a = 3* 5,a* 4
(a = 3* 5,a* 4),a+5
这样的就是逗号表达式
- 从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
- a = 3* 5,a* 4 的值为60
- (a = 3* 5,a* 4),a+5 的值为20