当前位置: 首页 > article >正文

Linux基础18-C语言篇之运算符Ⅰ【入门级】

运算符

算术运算符

基本的算术运算符

+,-:正负值运算符(单目运算符:只有一个运算数),举例:+5,-5

+,-,*,/,%:加减乘除取余运算符(双目运算符:由两个运算数),注意:进行除法运算时,除数不能为0

这些算术运算符的运算顺序与数学上的运算顺序是相同的

表达式和运算符的优先级与结合性

算术表达式:是指用算术运算符和括号将运算对象连接起来,符合C语言规范的式子,例如:

a * b / c - 1.5 + 'a'
  • 表达式中各种运算符的运算顺序,必要时需要添加括号,例如:

    (a + b)/(c + d) != a + b/c + d
    
  • 表达式中各运算对象的数据类型,特别是·整型相除,C语言规定,两个整型相除,其结果仍然为整数,例如:

    7/6的值为1
    4/7的值为0
    面试题:(1/2) + (1/2)的结果是0
    

优先级与结合性:在表达式求解时,先按运算符的优先级级别的高低次序执行。若一个运算对象两侧的运算符的优先级相同,则按规定的结合方向处理。

各种运算符的结合方向:

​ 算术运算的结合方向:“自左向右”,也就是运算对象先与左边的运算符结合,例如:

a - b + c   //先执行a-b,后执行+c

​ 有些运算符的结合方向:“自右向左”,也就是运算对象先与右边的运算符结合,例如:

i++

​ 若一个运算符两侧的数据类型不同,会自动转换成同类型后进行计算。

自增++、自增–运算符

作用:使变量的值增1或者减1

结合方向:“自右向左”

++i,–i

表示在使用该运算符对象之前,先让运算数自身增1或者减1,然后再使用,先计算后使用

例如:

int n = 1;
int x = ++n;//x,n都为2,等价于n=n+1,x=n
i++,i–

表示在使用该运算符对象之后,再让运算数自身增1或者减1,先使用后计算

例如:

int n = 1;
int x = n++;//x=1,n=2,等价于x=n,n=n+1

总结:不管是++i还是i++,运算数自身都加1;–同理。不同之处在于使用的先后顺序。

注意:

1.增1与减1运算符只适用于整型变量或字符型变量,不能用于其他类型变量

2.增1与减1运算符不能用于常量护着表达式,例如:–5,(i+j)++等都是非法的

练习

要求:推导以下表达式的i和n的值

int i = 1;
int n = i++ + (++i) - (--i) + i--;

赋值运算符

“=”称之为赋值运算符,作用将一个数据赋值给一个变量,如:int a=5;

执行赋值运算的结果,使将右边的数据存入左边变量对应的内存单元中,赋值运算的顺序:自右向左

赋值规则

如果赋值运算符两侧的类型不一致,则在赋值时进行类型转换,转换规则为:

  • 实型->整型变量:舍弃小数部分。例如:int a = 5.5,a的结果是5

  • 整型->实型变量:数值不变,以浮点型存储。例如:double a = 5,a的结果是5.000000

  • 字符型->整型变量:放在整型的低8位,保持原值不变的规则,例如:int a = ‘A’
    在这里插入图片描述

赋值表达式

主要实现复制运算的表达式。

语法:

变量 = 表达式;

案例:

a = 5;
y = 2 * x + 3;
a = a + 1;

作用:将右边表达式的值赋值给左边的变量。赋值表达式的取值取自左边的变量的值。

复合赋值运算符

+=,-=,*=,/=,%=,...,(&=,|=,>>=,<<=,~=,^=)

左右两侧操作完毕后,赋值给左侧的变量,例如:

a += 3;//等价于a = a + 3;

int c = 2;
c /= c;//等价于 c = c / c;

// ...其他复合赋值运算符类似

注意:

​ 在运算时,不能将(=)写作(==)

​ 赋值运算符的优先级属于最低(除了逗号运算符以外)一般都是最后运算

关系运算符

表达式 = 运算数 + 运算符

定义:>,<,>=,<=,==,!==

  • 所有的关系运算符都是二目(二元、双目)运算符,运算符的左侧和右侧可以是变量、可以是常量,还可以是表达式;举例:a>b;5>6;a+b>c
  • 关系运算符运算的结果是布尔类型,要么为真(非0,true需要引入stdool.h),要么为假(0,false需要引入stdool.h)

说明:

1.标准c中没有布尔类型的,非0代表真,实际操作中使用数字1,0代表假

​ while(0)循环一次都不执行

​ while(1)死循环,无限循环

2.真在输出的结果为1,假在输出的结果0

​ printf(“%d\n”,3<2);结果为0

​ printf(“%d\n”,3>2);结果为1

用作条件判断的时候,非0代表真,但是系统输出真的结果为1

注意:

​ 1、算术运算符的优先级高于关系运算符,例如:2+3>1+1等价于(2+3)>(1+1)

​ 2、关系运算符是二元(双目)运算符,不要连用,例如:

#include <stdio.h>
int main(int argc,char *argv[])
{
// 测试两个横等于
int score = 80;
printf("%d\n",0<score<=100);// 恒等于1
printf("%d\n",100>=score>0);// 恒等于1
printf("%d\n",60>=score>0); // 恒等于0
printf("%d\n",0<score<=60); // 恒等于1
return 0;
}

​ 经过测试发现,不会报错,但是没有意义,程序中千万不能这样写!!!

​ 正确写法:score>0&&score<=100

​ 3、不能将==(关系运算符)写成=(赋值运算符)

​ 4、一般浮点型进行比较,建议将两个数相减,结果和0进行比较,如果等于0,表示两个浮点数相等

​ 举例1:

​ float a = 22.2;

​ float b = 22.2;

​ a == b; 不推荐

​ a - b == 0; 推荐

​ 举例2:

​ float x = 2.0;

​ float y = 11.1; //近似存储:11.099995

​ float z = x*y; //实际:22.199999,我们看到的是22.2

​ z == 22.2 //此时结果为假,所以这种写法不靠谱

两个浮点数的比较:两个浮点数相减跟0比

a - b == 0;结果为真,说明a等于b;如果为假

a - b > 0;结果为真,说明a大于b

a - b < 0;结果为真,说明a小于b

a - b == 0.000001;结果为真,人认为的0.000001的误差能够接受,我们也认为a等于b


http://www.kler.cn/a/543771.html

相关文章:

  • 服务器使用宝塔面板Docker应用快速部署 DeepSeek-R1模型,实现Open WebUI访问使用
  • 【Linux】Ubuntu Linux 系统 ——PHP开发环境
  • Ollama 简单 好用 好玩
  • 和鲸科技上线 DeepSeek 系列模型服务,助力数智企业 AI 业务创新!
  • 开发完的小程序如何分包
  • Visual Studio 使用 “Ctrl + /”键设置注释和取消注释
  • 深度学习-人脸识别 对用户面部特征进行提取和匹配,实现快速、准确的人脸识别解锁
  • 22、深度学习 - 自学之路 - 隐藏层常用激活使用tanh函数,输出层激活函数使用softmax函数,对MNIST进行升级后的程序展示。
  • 自然语言处理与词嵌入
  • 内网ip网段记录
  • MySQL中类似PostgreSQL中的string_agg函数--GROUP_CONCAT函数的使用
  • 算法——搜索算法:原理、类型与实战应用
  • 如果维护了多种语言版本的文本对应关系,另一种语言只需要将对应文本填入对应位置即可,这种情况应该如何实现自动填入
  • CEF132编译指南 MacOS 篇 - 构建 CEF (六)
  • 纯前端检查是否有发版,并提示用户刷新
  • 基于HTTPS的docker私有仓库搭建
  • 硬件学习笔记--40 电磁兼容试验-4 快速瞬变脉冲群试验介绍
  • Docker 的打包及基本使用
  • Unity学习part1
  • Docker Desktop Windows 安装
  • 场景速记排序算法
  • 网络安全之探险
  • 自动化飞书腾讯电子签
  • Java进阶学习路线——序
  • python自动化测试之requests模块及通过变量实现接口关联
  • 用户体验UP!响应式网页设计的CSS魔法