算术运算符
计算机的核心任务简单描述就是读取输入的数据,然后进行相应的计算后输出。
C语言提供了丰富的运算符来实现数据的运算,常用的运算符有算术运算符、赋值运算符、自增自减运算符、逗号运算符、三目运算符、关系运算符和位运算符。
各个运算符都有优先级和结合性,所谓的优先级指的就是在多种运算符参与运算时先执行哪种运算,而结合性指的是只有在优先级相等时表达式运算的方向,也就是是从右向左,还是从左向右依次计算。
多个运算符和操作数在一起构成了表达式。
所谓的算术运算符就是数学意义上的加减乘除,然后在某些业务计算时还可能会用到求余数,C语言提供了取模运算符(%)来实现求余数。
优先级:C语言的算术运算符是先执行乘除运算,后执行加减运算。
结合性:如果是优先级相等的情况下是从左向右开始运算。
如果想更改运算符的优先级,可以通过使用()来实现,如下应用案例所示:
#include <stdio.h>
#include <stdlib.h>
/*
算术运算符的案例
@author tony ittimeline@163.com
@date 2017/11/26 13:26
@website www.ittimeline.net
*/
void operator_operator_num_expression() {
int num = 3 + 5; //+是运算符 3,5是操作符
int sum = 3 + (2 * 5);//表达式
int value = (1 + 2) * 3; //先乘除后加减,通过()提高优先级
value = ((1 + 2 + 3)*(9 - 5)) / (12 - 8); //()可以嵌套
int result = 1 + 2 - 3 + 4 - 5; //结合性 优先级相等的情况下 从左到右执行运算
//运算符不能相邻
//result = 1 + *3;
//乘号不能省略
//result = 6num;
system("pause");
}
只有整数才能求模运算,求模运算结果的符号和被除数相同,如下程序案例所示:
#include <stdio.h>
#include <stdlib.h>
/*
算术 操作符(取模)
@author tony ittimeline@163.com
@date 2017/11/26 13:28
@website www.ittimeline.net
*/
void alg_operator() {
int result = 1 + 3;//4
result = -3;//-3
result = 5 / 2; //2
double val = 3.5 * 2;
//整数才能取模
int remainder = 5 % 2;
remainder = -5 % 2; // -(5%2) 取模的结果的符号和被除数一样
int tmp = -5 % 3;//-2 被除数为正,取模结果为正,被除数为负,取模结果为负
tmp = -3 % 5; //-3
tmp = 5 % -3; //2
tmp = 3 % -5; //3
system("pause");
}
求模运算符可以实现数据的反转,如下应用案例所示:
#include <stdio.h>
#include <stdlib.h>
/*
使用取模运算符实现整数反转
@author tony ittimeline@163.com
@date 2017/11/26 13:32
@website www.ittimeline.net
*/
void reverse_num() {
int num = 87;
int unit = num % 10;
int tens_place = num / 10;
int reverse_val = unit * 10 + tens_place;
printf("%d反转之后的结果是%d\n",num,reverse_val);
system("pause");
}
在使用算术运算符执行数学运算时,需要注意参与运算的数据类型,运算结果的类型是参与运算的数据中占据内存空间最大的类型。
也就意味着数据类型在运算时会执行自动类型转换,例如两个整数执行算术运算,结果一定是整数。浮点数和整数执行算术运算,结果一定是浮点数。
取模运算常常用于大数据分割,游戏中修改数据的场景。
使用算术运算符实现5位数的整数反转
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdilib.h>
/*
使用取模运算符实现5位整数反转
@author tony ittimeline@163.com
@date 2017/11/29 23:26
@website www.ittimeline.net
*/
void reverse_num_extends() {
int num = 0;
printf("请输入你需要反转的五位正整数\n");
scanf("%d",&num);
printf("你输入需要反转的正整数是%d\n",num);
/*
实现思路,以12345为例
12345
个位: 12345%10=5;
十位: 12345%100=45/10=4
百位: 12345/100=123%10=3
千位: 12345/1000=12%10=2
万位: 12345/10000=1
*/
int unit = num % 10;
int tens_place = num % 100 / 10;
int hund