C

C 知识量:16 - 74 - 317

5.1 基本运算符><

基本运算符简介- 5.1.1 -

C用运算符表示算术运算,C中用于基本算术运算的运算符有:=、+、-、*和/(赋值、加、减、乘、除)。在C中没有指数运算符,但是可以使用标准数学库中的pow()函数进行指数运算。

赋值运算符- 5.1.2 -

赋值运算符写作“=”,在C语言中,“=”并不意味着相等,而是一个赋值运算符,例如:

car = bmw;

以上式子读作:将值bmw赋给变量car。=号左边是一个变量,右边是赋给该变量的值。

在C中类似x=x+1;这样的语句是完全正确的,因为可以将变量加1的结果赋值给自己,“=”不是等于的意思。

赋值表达式语句的目的是把值存储到内存位置上。用于存储值的数据存储区域统称为数据对象,而使用变量名是标识对象的一种方法。使用赋值运算符时应当了解以下概念:

  • 左值:=左边的值,一定是一个可修改的左值,用于标识可修改的对象。可以称左值为对象定位值。

  • 右值:=右边的值,指的是能赋值给左值的量,且本身不是左值。可以是常量、变量或其他可以求值的表达式(例如:函数调用)。

在C语言中可以进行多重赋值操作,例如:

number1 = number2 = number3 = 7;

加法运算符- 5.1.3 -

“+”称为加法运算符,用于加法运算,作用是使其两侧的值相加,例如:

#include <stdio.h>

int main(void) {
    printf("%d", 5 + 12);
    system("pause");
    return 0;
}

运行结果为:

17

在加法运算中,相加的值可以是变量,也可以是常量,例如:

#include <stdio.h>

int main(void) {
    int x = 23;
    int y = 52;
    printf("%d", x + y);
    system("pause");
    return 0;
}

运行结果为:

75

减法运算符- 5.1.4 -

“-”称为减法运算符,用于减法运算,作用是使其左侧的数减去右侧的数,例如:

#include <stdio.h>

int main(void) {
    int x = 23;
    int y = 52;
    printf("%d", y - x);
    system("pause");
    return 0;
}

运行结果为:

29

+和-运算符都被称为二元运算符,它们需要两个运算对象才能完成操作。

符号运算符- 5.1.5 -

减号还可以标明或改变一个值的代数符号,例如:如果a=-1,b=-a,那么b=1。以这种方式使用的负号称为一元运算符,它只需要一个运算对象。此外,一元+运算符不会改变运算对象的值或符号,例如:如果a=+1,那么a=1,但这也是合法的。

乘法运算符- 5.1.6 -

符号“*”表示乘法,例如:

#include <stdio.h>

int main(void) {
    int x = 8;
    int y = 5;
    printf("%d", x * y);
    system("pause");
    return 0;
}

运行结果为:

40

除法运算符- 5.1.7 -

“/”表示除法。“/”左侧的值是被除数,右侧的值是除数。整数的除法和浮点数除法不同,浮点数的除法结果是浮点数,而整数的除法结果是整数。问题是整数没有小数部分,如果整数的除法运算出现除不尽的情况,结果中的小数部分会被舍弃,称为截断。例如:

#include <stdio.h>

int main(void) {
    int x = 8;
    int y = 5;
    float a = 51.2;
    float b = 3.5;
    printf("x/y=%d\n", x / y);
    printf("a/b=%f\n", a / b);
    printf("a/x=%f", a / x);
    system("pause");
    return 0;
}

运行结果:

x/y=1
a/b=14.628572
a/x=6.400000

由上述结果可以看到,整数除法的余数被完全截取了,不是四舍五入,而是只留下整数部分。其中,第三个式子是浮点数除以整数的混合计算,其结果仍然是浮点数。实际上,计算机不能真正用浮点数除以整数,编译器会在计算前将两个运算对象转换成相同的类型再计算。对于负数的整数除法,目前,C99标准规定,使用趋零截断。例如:应把-5.6转换成-5。

运算符优先级- 5.1.8 -

对于各种算术运算符的操作顺序,C语言有明确规定,通过运算符的优先级来解决。每个运算符都有自己的优先级,对于算术运算,乘法和除法优先于加法和减法;对于相同优先级的算术计算,则根据运算符在语句中的顺序来决定。

C语言中,算术运算符的优先级(从高到低):

运算符结合律
()从左往右
+ - (一元)从右往左
* /从左往右
+ - (二元)从左往右
=从右往左

注意:正号(加号)和负号(减号)的两种不同用法。结合律说明了运算符如何与算法对象结合。当两个运算符共享一个运算对象时,优先级和结合律决定了先进行哪项运算。要改变计算顺序,可以使用圆括号,它的优先级最高。