往期回顾
【第一章】《认识C语言》
【第二章】C语言概述及基本知识1
【第二章】C语言概述及基本知识2
【第三章】字符串和格式化输入/ 输出
【第三章】 printf
【第三章】 scanf
【第三章】 putchar
【第三章】 getchar
【第三章】 sizeof
【第三章】 strlen
【第三章】 define
运算符
赋值运算符:=
在C语言中,=并不意味着“相等”,而是一个赋值运算符。下面的赋值表达式语句:
bmw=2002;
把值 2002赋给变量bmw。也就是说,=号左侧是一个变量名,右侧是赋给该变量的值。符号=被称为赋值运算符。另外,上面的语句不读作“bmw 等于 2002”,而读作“把值 2002赋给变量 bmw”。赋值行为从右往左进行。
也许变量名和变量值的区别看上去微乎其微,但是,考虑下面这条常用的语句:
i=i + 1;
对数学而言,这完全行不通。如果给一个有限的数加上1,它不可能“等于”原来的数。但是,在计算机赋值表达式语句中,这很合理。该语句的意思是:找出变量i的值,把该值加1,然后把新值赋值变量i。
在C语言中,类似这样的语句没有意义(实际上是无效的):
2002 =bmw;
因此,在编写代码时要记住,=号左侧的项必须是一个变量名。实际上,赋值运算符左侧必须引用一个存储位置。最简单的方法就是使用变量名。
常见示例
int ex;
int why;
int zee;
int Two=2;
why =42;
zee = why;
ex=TWO *(why + zee);
说明
/*定义整形变量 ex why zee Two,其中Two赋值为2*/
int ex;
int why;
int zee;
int Two=2;
/*
将42 赋值给 变量why
*/
why =42;
/*
将why中的值(42) 赋值给 变量zee
*/
zee = why;
/*
将TWO *(why + zee)中的值 2 *(42 + 42) 赋值给 变量ex
*/
ex=TWO *(why + zee);
加法运算符:+
加法运算符用于加法运算,使其两侧的值相加。
int i;
/* 将 35(12+23)的值赋值给变量i */
i = 12+23
减法运算符: -
减法运算符用于减法运算,使其左侧的数减去右侧的数。
int i;
/* 将 20(21-1)的值赋值给变量i */
i = 21 - 1
+和-运算符可以都被称为二元运算符,即这些运算符需要两个运算对象才能完成操作。
符号运算符:-和+
减号还可用于标明或改变一个值的代数符号
int i = -1;
int a = -23;
int s = -12312;
以这种方式使用的负号被称为一元运算符。一元运算符只需要一个运算对象
正号也可以写上去,但是默认如果不是 负号,则该数为正
乘法运算符:*
符号*表示乘法
/*下面的语句用2.54乘以inch,并将结果赋给cm:*/
int cm,inch = 2;
cm=2.54*inch;
除法运算符:/
C使用符号/来表示除法。/左侧的值是被除数,右侧的值是除数。
整数除法和浮点数除法不同。
浮点数除法的结果是浮点数
而整数除法的结果是整数
整数是没有小数部分的数。这使得5除以3很让人头痛,因为实际结果有小数部分。在语言中,整数除法结果的小数部分被丢弃,这一过程被称为截断。
#include <stdio.h>
int main(void)
{
printf("integer division: 5/4 is %d \n", 5/4);
printf("integer division: 6/3 is %d \n", 6/3);
printf("integer division: 7/4 is %d \n", 7/4);
printf("floating division: 7./4. is %1.2f \n", 7./4.);
printf("mixed division: 7./4 is %1.2f \n", 7./4);
return 0;
}
则会出现以下结果
/*整数*/
integer division: 5/4 is 1
integer division: 6/3 is 2
integer division: 7/4 is 1
/*浮点数*/
floating division: 7./4. is 1.75
/*混合类型*/
mixed division: 7./4 is 1.75
注意
整数除法会截断计算结果的小数部分(丢弃整个小数部分),不会四舍五入结果。混合整数和浮点数计算的结果是浮点数。实际上,计算机不能真正用浮点数除以整数,编译器会把两个运算对象转换成相同的类型。本例中,在进行除法运算前,整数会被转换成浮点数。