基本算术运算符
+ (加)、 - (减) 、 * (乘) 、 / (除) 和 % (求余数)
这五个运算符的优先级为:
*、/ 和%同级,但比+和-高。即先乘除后加减。
算术表达式是由算术运算符和操作数组成的表达式。表达式的值是一个数值,表达式的类型具体由运算符和操作数确定。
例如: 5+3*(6-2) 表达式的类型为int 型。
3+4.0-3/2.0 表达式的类型为double型。
数据类型转换
通常参与运算的数据类型不一定完全一致,操作时应先将其转换成相同的数据类型,然后操作。
强制转换:
强制类型转换,变量值本身未变化
(double)a;
(int)x+y;先把x的值转换成int型,然后再加y。注意区别
(float)(5%3)
int i;
…
i=i+(int)9.801;
隐式转换:
在编译时由编译程序按照一定规则自动完成,不需人为干预
数据参加运算前要进行下列转换: char,short→int,float→double
混合运算时数据类型由低级→高级 int unsigned long double
以上并不意味着int必须到unsigned再到long的依次转换,而是由算式中的最高级进行转换的。
自增自减运算符:
#include <stdio.h>
int main1()
{
int a = 10;
a++; // a = a + 1;
++a; // a = a + 1;
printf ("a = %d\n", a); // a = 12
//int b = a++;// b = a ; a = a + 1;
int b = ++a; // a = a + 1; b = a;
printf ("b = %d\n", b);
return 0;
}
int main2()
{
int i = 10;
int j = 100;
// C语言贪婪法则,编译器从左往右扫描运算符,
// 尽可能多的组合运算符
int c = i+++j; // i++ +j
printf ("%d, %d, %d\n", i, j, c);
return 0;
}
int main3()
{
int x=8,z, y;
y = (++x) + (x++) + (++x);
z = (--x) + (x--) + (++x);
printf ("y=%d, z = %d, x=%d\n",y, z, x);
return 0;
}
int main()
{
int i = 10;
// 对于 sizeof 这个关键字来讲
// 在编译的时候会将它括起来的表达式改为最终的类型而不是表达式本身
// sizeof(i++) i++最终是整形 所以 编译的是 转换为
// sizeof (int) 就没有 i++ 这句话了
// 所以sizeof 内部不要有赋值这样的操作
printf ("%d\n", sizeof(i=100));
printf ("%d\n", i);
return 0;
}