总运算符表与运算符的规则(按优先级排列)
优先级 | 运算符 | 功能 | 结合方式 |
1 | ( ) [ ] -> . | 括号,数组,两种结构的成员访问 | 由左向右 |
2 | ! ~ ++ -- + - * & (类型) sizeof | 否定,按位否定,增量,减量,正负号,间接,取地址,类型转换,求大小 | 由右向左 |
3 | * / % | 乘,除,取模 | 由左向右 |
4 | + - | 加,减 | 由左向右 |
5 | << >> | 左移,右移 | 由左向右 |
6 | < <= >= > | 小于,小于等于,大于等于,大于 | 由左向右 |
7 | == != | 等于,不等于 | 由左向右 |
8 | & | 按位与 | 由左向右 |
9 | ^ | 按位异或 | 由左向右 |
10 | | | 按位或 | 由左向右 |
11 | && | 逻辑与 | 由左向右 |
13 | ?= | 条件 | 由右向左 |
14 | = += -= *= /= &= ^= |= <<= >>= | 各种赋值 | 由右向左 |
15 | , | 逗号(顺序) | 由左向右 |
无 | 无 | 无 | 无 |
算术运算符
除法
定义:当参与运算的是两个整数(long , unsigned long , int , unsigned int , short , unsigned short)时,除法遵循“向零取整”原则(事实上,所有将带小数的数据转换成整数的运算,都遵循这个原则)。
示例代码:
#include <stdio.h>
#include <stdlib.h>
/*
这个程序用来验证除法运算的“向零取整”规则
*/
int main()
{
//定义两个int型数字:iNum1,iNum2 以及用于存放运算结果的iAns;
int iNum1=5,iNum2=3,iAns;
//使iAns获得iNum1/iNum2的结果;
iAns=iNum1/iNum2;
//输出iAns;
printf("第一次的结果是:%d\n",iAns);
//改变iNum1和iNum2的值,再次进行运算;
iNum1=-5;
iNum2=3;
iAns=iNum1/iNum2;
//再次输出iAns
printf("第二次的结果是:%d",iAns);
return 0;
}
PS:如以上代码所示,因为iAns为int型数据,所以必须为整数,当5/3的结果带小数时,自动将结果后的小数去掉,使结果向零靠拢。当-5/3的结果是带小数的负数时,同样去掉小数,使结果向零靠拢。注意!基本规则为“向零取整”即:1.988和1.001转换为整数的结果都一样,是1,而所有0.xxx的数值转换为整数的结果都为零!
取模运算
定义:取模运算要求运算符两侧的数都是整数!如果使用诸如:2.34%5的算式,程序就会报错。
示例:略
基本数据类型的自动转换与强制转换
自动转换
示例1:
double num=3;
printf("num=%f",num);
PS1:结果是:num=3.000;而非num=3;
PS2:这是因为,在将3赋值给num的过程中。整型的数值自动被转换成了浮点型。
示例2:假如是像:2L+32761;或者:10+3.25;再或者:10+3.25f这样的算式,他们将按照以下的规律进行运算
PS1:如图所示,当一个类型的数据要转换成另一个类型的数据时,它将总是顺着指针的方向进行转换。
PS2:当一个int型的数据和long型数据相加。结果的数据类型就是long型的。而如果是一个int型的数据和float型的数据相加,结果的数据就是double型的。
PS3:每当在算式中对不同数据类型的数据进行运算时。数据间就会先将自己顺着上图的规则转换成相同的数据类型,然后再进行运算。
强制转换:
示例:有时候,会需要得到一个特定数据类型的数值。比如: 希望输出一个double 类型的数据。
int num=3;
printf("num=%f",(double)num);
PS1:这样,运行的结果:num=3.000
PS2:通过在num前加上一对小括号,并在小括号内填上自己想要的数据类型,就能将num强制转换成该类型。
PS3:强制转换的运算优先级为2,在大部分情况下将被优先执行。
PS4:虽然多数情况下,自动类型转换就能满足要求。但为了代码的明了,严谨。我们应该尽量把使用强制类型转换把类型的转变过程表示出来。以便于错误的排查和代码的易于理解。
PS5:类型转换的过程中可能会出现数据的丢失,比如:double num1=3.25; int num2=(int)num1;结果num2的值就是3,这里原本在3后面的数值就在转换的过程中丢失了。
数学库函数:
函数名 | 函数表达式 |
三角函数 | sin cos tan |
反三角函数 | asin acos atan |
双曲函数 | sinh cosh tanh |
以e为底的指数函数 | exp |
自然对数函数 | log |
以10为底的对数函数 | log10 |
平方根 | sqrt |
绝对值 | fabs |
示例1:
double num1=9.0;
double num2=sqrt(num1);
printf("num2=%f",num2);
PS1:这段代码的输出为:num2=3.0
PS2:可见,平方根函数sqrt将9取平方根为3。
示例2:使用数学库函数之前,必须在程序顶部声明调用
#include <stdio.h>
#include <stdlib.h>
#include <math.h> //这里要加上一条代码,作为对数学