C 语言的基本算术运算符有: = + - * /
=
赋值运算符左侧必须引用一个内存中的位置, 最简单的方法就是使用变量名, 也可以使用指针指向内存中的某个位置.
赋值表达式的目的是把值储存到目标内存位置上.
下面语句中的 = 表示初始化而不是赋值:
const int a = 10;
下面表达式中,
a = b + (c - d);
表达式 (c - d) 是一个右值, 该表达式不能表示特定的内存位置, 也不能给它赋值. 它只是程序计算的一个临时值, 在计算完毕后会被丢弃.
赋值运算符支持连续赋值.
程序示例:
#include
int main(void)
{
int a, b, c;
a = b = c = 10;
printf("a = %d, b = %d, c = %d\n", a, b, c);
return 0;
}
结果:
a = 10, b = 10, c = 10
不支持连续初始化, 下面语句是错误的:
int a = b = c = 10;
这些赋值运算符都用于更新变量, 左侧是一个变量名, 右侧是一个表达式.
赋给变量的新值是根据右侧表达式的值调整之后的值.
确切的调整方案取决于具体的运算符.
例如:
scores += 20 is the same as scores = scores + 20 .
dimes -= 2 is the same as dimes = dimes - 2 .
bunnies *= 2 is the same as bunnies = bunnies * 2 .
time /= 2.73 is the same as time = time / 2.73 .
reduce %= 3 is the same as reduce = reduce % 3 .
这几个派生的赋值运算符的优先级和 = 相同.
+
additional operator
-
subtraction operator
加法运算符和减法运算符都是双目运算符 binary operator
-
可以用来表明或者改变一个值的代数符号.
程序示例:
#include
int main(void)
{
int a, b;
a = -10;
b = -a;
printf("a = %d, b = %d\n", a, b);
return 0;
}
结果:
a = -10, b = 10
此时 - 是一个一元运算符 unary operator
C90 增加了 + 用作一元运算符. 例如:
a = +10;
这在 C90 之前是不允许的, 因为不能将 + 用作一元运算符.
multiplication operator
division operator
浮点数除法的结果是浮点数。
即便可以整除,结果也是浮点数。
整数除法的结果是整数。
整数除法的结果如果是小数,将直接丢弃小数部分。这叫做截断 truncation. 而不是进行四舍五入.
程序示例:
// 整数除法, 除不尽, 小数直接被丢弃
#include
int main(void)
{
int a = 9, b = 4;
printf("%d\n", a / b);
return 0;
}
结果:
2
程序示例:
#include
int main(void)
{
int a = 8;
float b = 4.0;
printf("%f\n", a / b);
return 0;
}
结果:
2.000000
C99 规定, 负数的整数除法采用 趋零截断.
比如 − 1 ÷ 3 = − 0.333333 -1{\div}3= -0.333333 −1÷3=−0.333333
代码:
#include
int main(void)
{
int a = -1;
int b = 3;
int c = 1;
int d = -3;
printf("%d\n", a / b);
printf("%d\n", c / d);
return 0;
}
结果:
0
0