5.C语言常见运算符及其优先级

news2024/10/6 1:44:29

运算符

用算术运算符将运算对象(也称操作数)连接起来的、符合C语言规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。
例如:a * b / c - 1.5 + ‘a’

运算符的分类

1.双目运算符:即参加运算的操作数有两个
例:a + b

2.单目运算符:参加运算的操作数只有一个
例:++自增运算符
- -自减运算符
int a =10;
a++;

3.三目运算符:即参加运算的操作数有三个
例:条件运算符 () ? () : ()

1.算术运算符

+ , - , * , / ,% , += , -= , *= , /= , %=

10%3 表达式结果为1
复合运算符:
a += 3 相当于a=a+3
a = 6+8 相当于 a=a(6+8)

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = 0;
	c = a + b;
	printf("c=%d\n", c);

	c = 10 % 3;
	printf("c=%d\n", c);

	a += 3;
	printf("a=%d\n", a);

	b += 2 * 8;
	printf("b=%d\n", b);
	return 0;
}

2.关系运算符

> , < , == , >= , <= , !=

一般用于判断条件是否满足或者循环语句

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int i;
	if (a > b)
	{
		printf("a>b\n");
	}
	if (a < b)
	{
		printf("a<b\n");
	}
	for (i = 0; i <= 100; i++)
	{
		printf("i=%d\n", i);
	}
	return 0;
}

3.逻辑运算符

  1. && 逻辑与
    两个条件都为真,则结果为真
    if ( (a>b) && (a<c) )
    注意:if (b < a < c) 这种表达方式是错误的
  1. || 逻辑或
    两个条件至少有一个为真,则结果为真
    if ( (a>b) || (a<c) )
  1. ! 逻辑非
    if ( !(a>b))
    {
    }
#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	if ((a < b) && (b > c))
	{
		printf("条件为真!\n");
	}
	else {
		printf("条件为假!\n");
	}
	if ((a < b) || (b > c))
	{
		printf("逻辑或的结果为真!\n");
	}
	if (!(a > b))
	{
		printf("逻辑非条件成立!\n");
	}
	return 0;
}

在这里插入图片描述

4.位运算符

十进制数转二进制数

123 / 2 = 61 余1
61 / 2 = 30 余1
30 / 2 = 15 余0
15 / 2 = 7 余1
7 / 2 = 3 余1
3 / 2 = 1 余1
1 / 2 = 0 余1
123 的二进制为 111 1011

原码反码补码
正数在内存中以原码形式存放,负数在内存中以补码的形式存放

正数:原码=反码=补码

原码:将一个整数,转换成二进制,就是其原码。
如单字节的5的原码为:0000 0101;-5的原码为 1000 0101。

反码:正数的反码就是其原码;负数的反码就是将原码中,除符号位以外,每一位取反。

如单字节5的反码为:0000 0101;-5的反码为 1111 1010。
补码:正数的补码就是其原码;负数的反码+1就是补码。
如单字节5的补码为:0000 0101; -5的补码为 1111 1011。
在计算机中,正数是直接用原码表示的,负数用补码表示。

#include<stdio.h>
int main()
{
	printf("%x\n",-5);
	return 0;
}
//1000 0000 0000 0000 0000 0000 0000 0101 -5的原码
//1111 1111 1111 1111 1111 1111 1111 1010 -5的反码
//1111 1111 1111 1111 1111 1111 1111 1011 -5的补码
// ff ff ff fb

位运算
无论正数还是负数,编译系统都是按照内存中存储的内容进行位运算。

  1. & 按位与
    任何值与0得0,与1保持不变
    使某位清零
    -5 & 10
    1111 1111 1111 1111 1111 1111 1111 1011
    0000 0000 0000 0000 0000 0000 0000 1010
    0000 0000 0000 0000 0000 0000 0000 1010
  1. | 按位或
    任何值或1得1,或0保持不变
    -5 | 10
    1111 1111 1111 1111 1111 1111 1111 1011
    0000 0000 0000 0000 0000 0000 0000 1010
    1111 1111 1111 1111 1111 1111 1111 1011
  1. ~ 按位取反
    0变1,1变0
    ~(-5)
    1111 1111 1111 1111 1111 1111 1111 1011
    0000 0000 0000 0000 0000 0000 0000 0100
#include<stdio.h>
int main()
{
	printf("%x\n",-5 & 10);//0000 0000 0000 0000 0000 0000 0000 1010
	printf("%x\n", -5 | 10);//1111 1111 1111 1111 1111 1111 1111 1011
	printf("%X\n", ~(-5));// 0000 0000 0000 0000 0000 0000 0000 0100
	return 0;
}
//1000 0000 0000 0000 0000 0000 0000 0101 -5的原码
//1111 1111 1111 1111 1111 1111 1111 1010 -5的反码
//1111 1111 1111 1111 1111 1111 1111 1011 -5的补码
// ff ff ff fb

在这里插入图片描述

  1. ^ 按位异或
    相异得1,相同得0
    1001 1100
    0101 1010
    - - - - - - - - -
    1100 0110
  1. 位移
    >> 右移
    << 左移
    注意右移分:逻辑右移、算术右移
    (1) 右移
    逻辑右移:高位补0,低位溢出
    0101 1010 >>3
    0001 1011
    算术右移:高位补符号位,低位溢出(有符号位)
    1010 1101 >>3
    11110 1011

在一个编译系统中到底是逻辑右移还是算术右移,取决于编译器。

//判断右移是逻辑右移还是算术右移
#include<stdio.h>
int main()
{
	printf("%d\n", (-1) >> 3);
	return 0;
}// 1000 0000 0000 0000 0000 0000 0000 0001
// 1111 1111 1111 1111 1111 1111 1111 1111

(2) 左移 << 高位溢出,低位补0
5 << 1
0000 0101
0000 1010

5.条件运算符

() ? () : ()

A ? B : C
如果?前面的表达式成立,整个表达式的值是?和 : 之间的表达式的结果
否则是之后表达式的结果

#include<stdio.h>
int main()
{
	int a;
	a = ((3 < 5) ? 8 : 9);
	printf("a=%d\n", a);
	return 0;
}

在这里插入图片描述

6.逗号运算符

() , ()
逗号运算符的结果是后边表达式的结果。

int main()
{
	int num;
	num = ( 5 , 6 );
	printf("num=%d\n", num);
	return 0;
}

在这里插入图片描述

7.自增自减运算符

i++ , i–
运算符在变量的后面,在当前表达式中先用 i 的值,下条语句的时候 i 的值改变

#include<stdio.h>
int main()
{
	int num;
	int i = 3;
	int j = 7;
	num = i++;
	printf("num=%d\ti=%d\n", num, i);
	num = --j;
	printf("num=%d\tj=%d\n", num, j);
	return 0;
}

5eeceb44087899a24fb13877b96.png)

运算符的优先级及结合性

运算符优先级

在表达式中按照优先级先后进行运算,优先级高的先于优先级低的先运算。
优先级一样的按结合性来运算。

int a;
a = 2 + 5 + 3 * 4 - 6

运算符的结合性

左结合性:从左往右运算

int a;
a = 2 + 3 + 9 + 10;

右结合性:从右往左算

int a,b,c,d;
a = b = c = d = 100;

在这里插入图片描述
在这里插入图片描述
注:建议当表达式比较复杂的时候,用 ()括起来,括号的优先级最高,优先算括号里的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例

原文网址&#xff1a;SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍SpringMVC如何获取路径中的参数。也就是&#xff1a; Content-Type为x-www-form-urlencoded。 代码 Controller BasicController.java…

在线考试系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Prometheus邮件告警

一. 部署Alertmanager&#xff1a; 1. 解压Alertmanager压缩包&#xff1a; [rootnode5 ~]# tar xf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local/ 2. 为解压后的文件做软连接&#xff1a; [rootnode5 ~]# ln -sv /usr/local/alertmanager-0.24.0.linux-amd64/ …

SSM整合(三)

redis之简单使用 1.准备工作 1.1 在resource资源文件夹下面创建redis.properties文件,并填写如下内容 #连接端口 redis.port6379 #连接地址 redis.host127.0.0.1 #超时时间&#xff1a;单位ms redis.timeout3000 #授权密码 redis.password #最大连接数&#xff1a;能够同时建…

GUI编程--PyQt5--QLineEdit

文章目录键盘文本输入框文本占位符密码显示与隐藏自动补全输入限制掩码字符光标移动设置文本区域常用编辑功能输入控件&#xff0c;用于捕获用户的信息键盘文本输入框 QLineEdit, 单行&#xff0c;纯文本输入框 # 实例化 文本输入框 le QLineEdit("默认值", windo…

Material Design之CoordinatorLayout 与AppbarLayout与CollapsingToolbarLayout

Material Design 之 CoordinatorLayout 第一次接触CoordinatorLayout 你可能有这些疑问&#xff0c;CoordinatorLayout 到底是个什么玩意儿呢&#xff1f;它到底能帮我们做什么&#xff1f;我们要了解它&#xff0c;肯定是先看官方文档了。文档的第一句话就非常醒目&#xff1a…

高职网络系统管理比赛实例

同一交换机不同端口配置不同vlan&#xff0c;实现同一交换机内不同业务部门隔离。 在路由器中配置斜面的内容 1 输入enableRuijie>enable 2 第一次使用该交换机时&#xff0c;需要设置密码&#xff0c;然后再次确认密码 Please Set the password:*** Please check the pass…

掌握这10个Pandas函数,助你彻底了解数据集

10个帮助你完全理解数据集的Pandas 函数 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 Pandas是用于探索性数据分析 (EDA)的最佳 Python 模块。 许多初级数据科…

如何在liunx下实现一个简单的程序?

目录&#xff1a;安装nano写代码保存退出查看文件内容生成可执行程序控制台输出你的代码博后小知识&#xff08;gcc -g -o -c分别是什么意思&#xff1f;&#xff09;安装nano [rootVM-8-11-centos ~]# yum install -y nano 写代码 [rootVM-8-11-centos ~]# nano no_die.c 保存…

向量加权平均算法附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【C++学习第八讲】简单变量(二)

目录&#xff1a;简单变量&#xff08;二&#xff09;一、无符号类型二、选择整型类型三、 char类型&#xff1a;字符和小整数一、无符号类型 前面介绍的4种整型都有一种不能存储负数值的无符号变体&#xff0c;其优点是可以增大变量能够存储的最大值。 例如&#xff0c;如果…

软件测试---

一 : 主要内容 二 : 什么是软件测试 在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程.上面这是官话 . 在我们日常生活中 , 就有许多测试的行为 , 比如地铁站的金属检测仪 , 用于检测旅客…

深度学习——损失函数推导过程(三个方面诠释损失函数的由来意义)

三个维度诠释损失函数 我们在学习机器学习的过程中&#xff0c;通常利用损失函数来衡量模型所做出的预测离真实值之间的偏离程度。 损失函数大致分为3类方法 最小二乘法极大似然估计法交叉熵 1.最小二乘法 这个方法是最显而易懂的&#xff0c;假设x是真实值&#xff0c;y是…

【PyTorch】Neural Network 神经网络

文章目录四、Neural Network 神经网络1、Containers - Module2、Convolution Layers - functional.conv2d2.1 stride2.2 padding3、Convolution Layers - Conv2d3.1 in_channels out_channels4、Pooling layers - MaxPool2d4.1 ceil_mode4.2 TensorBoard5、Non-linear Activati…

Eclipse启动SpringBoot无法读取application.properties或者application.yml文件内容

原因 eclipse配置源代码excludes过滤掉了application.properties或application.yml造成的 解决 2.1 右键项目&#xff0c;选Build Path --> Configure Build Path 2.2 找到 Source --> resources --> Excluded&#xff0c;点击Edit 2.3 点击Edit 2.4 将**改成Non…

【Java八股文总结】之多线程

文章目录Java多线程一、线程1、什么是线程&#xff1f;什么是进程&#xff1f;二者的区别1、给线程起别名的3种方式2、this关键字3、守护线程和用户线程4、并发和并行的区别&#xff1f;5、线程间通信的方式2、synchronized关键字补充&#xff1a;snchronized底层实现原理3、vo…

如何用FMEA方法排除架构隐患

FMEA介绍 定义 FMEA&#xff08;Failure mode and effects analysis&#xff0c;故障模式与影响分析&#xff09;又称为失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等&#xff0c;本文采用“故障模式与影响分析” 历史 FMEA 最早是在美国军方开始应用的&a…

2022-11-20-使用BeatuifulSoup进行页面内容的获取

一、什么是DOM树 DOM树是一种结构&#xff0c;树是由DOM元素和属性节点组成的&#xff0c;DOM的本质是把html结构化成js可识别的树模型&#xff0c;有了树模型&#xff0c;就有了层级结构&#xff0c;层级结构是指的是元素和元素之间的关系父子、兄弟。 实例&#xff1a; 标题…

Java语法之多态

上次给大家分享了Java的继承&#xff0c;今天小编给大家分享面向对象三大特性的第三大特性&#xff0c;也就是多态&#xff0c;fighting~~ 目录 &#x1f388;一. 多态 &#x1f388;1.1多态的概念 &#x1f388;1.2多态的实现条件 &#x1f388;1.3向上转型和向下转型 &a…

HDFS 的 shell操作

文章目录前言一、基本语法二、创建目录三、上传moveFromLocal-copyFromLocal-put-appendToFile四、下载-copyToLocal-get五、HDFS直接操作-ls-cat-chgrp、-chmod、-chown-mkdir-cp-mv-tail-rmrm -r-du-setrep前言 HDFS的shell操作很多跟linux的shell语法是比较相近&#xff0c…