2022-06-19 基本算术运算

算术运算符的优先级
运算符含义 需要的操作个数优先级
- 去相反数(Opposite Number) 1个(一元)最高
*乘法(Multiplication) 2个(二元)较低
/除法(Division)
%取余
+加法(Addition) 2个最低
-减法 (Subtraction)

只需要一个操作数的运算符称为一元运算符(或单目运算符),需要两个操作数的运算符称为二元运算符(或双目运算符),需要三个操作数的运算符称为三元运算符(或三目运算符)。条件运算符是C语言提供的唯一一个三元运算符。
注意:求余运算限定参与运算的两个操作数必须为整型,不能对两个实型数据进行求余运算。

复合的赋值运算符

在C语言的赋值中有一种特殊的赋值运算符,就是复合赋值运算符。下面是关于C语言复合赋值运算符的’相关介绍!

复合赋值运算符就是在赋值符“=”之前加上其它二目运算符可构成。比如大家可能最常看到这样的语句:n += 5;这个语句相当于:n = n + 5;

C语言中有如下的复合赋值运算符:
n += a; 相当于n = n + a;
n -= a; 相当于n = n - a;
n *= a; 相当于n = n * a;
n /= a; 相当于n = n / a;
n %= a; 相当于n = n % a;
n <<= a; 相当于n = n << a;
n >>= a; 相当于n = n >> a;
n &= a; 相当于n = n & a;
n ^= a; 相当于n = n ^ a;
n |= a; 相当于n = n | a;

注意:如果右边不只是一个变量而是一个表达式,则需要看成一个整体.
比如:
n /= a * b + c >> d 相当于 n = n / (a * b +c >> d),右边作为一个整体加括号。

即使是有同样优先级的也需要,请看下面的情况:
int n = 3;
int m = 13;
n *= 12 / m;
如果不加括号而是直接写成另外一种:n = n * 12 / m,显然这个计算结果大于0,而上面的为0。

复合运算要注意以下:
复合运算符左边必须是变量;
复合运算符右边的表达式计算完成后才参与复合赋值运算。复合运算符常用于某个变量自身的变化,尤其当左边的变量名很长时,使用复合运算符书写更方便。

复合赋值运算的优先级符合C语言运算符的优先级表,结合方向为从右到左。

增1和减1运算符

自增运算符为++,其功能是使变量的值自增1
自减运算符为- -,其功能是使变量值自减1。
它们经常使用在循环中。自增自减运算符有以下几种形式:

运算表达式说明 运算规则
++aa自增1后,再取值 先运算,再取值
--aa自减1后,再取值
a++a先取值,再自增1先取值,在运算
a--a先取值,再自减1
宏常量与宏替换

宏常量也称为符号常量,是指用一个标识符来表示的常量,这时该标识符号与此常量是等价的。宏常量是由宏定义编译预处理命令来定义的。宏定义的一般形式为:
#define 标识符 字符串
例如#define PI 3.14159

注意,宏定义中的宏名与字符串之间可有多个空白符,但无需加等号,且字符串后一般不以分号结尾,因为宏定义不是C语言,而是一种编译预处理命令。

const常量

const是constant的缩写,意思是“恒定不变的”,它是定义只读变量的关键字。用const定义只读变量的方法很简单,就在定义变量时前面加const即可,如:
一般形式为:
#const 数据类型 常量名 = 常量值
const int a = 23;

用const定义的变量的值是不允许改变的,不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值,如果程序中试图改变它的值,编译的时候就会报错。

const与define的区别

1)define是预编译指令,而const是变量的定义。define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。

2)const定义的是变量,而define定义的是常量。define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型,占用存储单元。

3)const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。

#include <iostream>
#define Day 7
using namespace std;
int main()
{
    const int month = 12;
    cout << "一周有" << Day << "天" << endl;
    cout << "一年有" << month << "个月" << endl;
    system("pause");
    return 0;
}

在这里插入图片描述

const修饰函数的参数

在给函数传参数时(如变量的地址),为了防止在函数内部改变参数的值(指针指向的值),通常用const来修饰函数的参数,给该函数传一个不可改变的值。

自动类型转换与强制类型转换运算符
表达式中的自动类型转换

C编译器在对操作数进行运算之前将所有操作数都转换成取值范围较大的操作数类型,称为类型提升
类型提升的规则如图所示,纵向箭头表示必然的转换,即将所有的char和short都提升为int,这一步称为整形提升
在这里插入图片描述

赋值中的自动类型转换

在一个赋值语句中,若赋值运算符左侧(目标侧)变量的类型和右侧表达式的类型不一致,则赋值时将发生自动类型转换。
类型转换的规则是:将右侧表达式的值转换成左侧变量的类型。

强制类型转换运算符

强制类型转换运算符简称强转运算符或转换运算符,它的主要作用是将一个表达式值的类型强制转换为用户指定的类型,它是一个一元运算符,与其他一元运算符具有相同的优先级。
通过下面方式可以把表达式的值转为任意类型:
(类型)表达式

#include <stdio.h>
int main(void)
{
    int m = 5;
    printf("m/2 = %d\n,m/2");
    printf("(float)(m/2) = %f\n",(float)(m/2));
    printf("(float)m/2 = %f\n",(float)m/2);
    printf("m = %d\n",m);
    return 0;
}

在这里插入图片描述

常用的标准数学函数

在使用数学函数时,只要在程序的开头加上#include <math.h>的编译预处理命令即可。
sqrt()为计算平方根的标准数学函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值