C语言-运算符

news2024/11/15 11:54:42
1 运算符的概念以及分类 运算符的概念
用运算符将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C表达式运算对象包括常量、变量、函数等
运算符的分类
1、双目运算符:即参加运算的操作数有两个
例:+
a+b
2、单目运算符:参加运算的操作数只有一个
++自增运算符 给变量值+1
--自减运算符
int a=10;
a++;
3、三目运算符:即参加运算的操作数有3个
()?():()
2 算术运算符
+   -   *     /    %   +=    -=    *=    /=      %=
10%3 表达式的结果为1
复合运算符:
a += 3 相当于a=a+3
a*=6+8 相当于a=a*(6+8)
#include <stdio.h>

//算术运算符的使用

int main(int argc, char *argv[])
{
    int a = 40;
    int b = 6;
    printf("%d + %d = %d\n", a, b, a + b);
    printf("%d - %d = %d\n", a, b, a - b);
    printf("%d * %d = %d\n", a, b, a * b);
    printf("%d / %d = %d\n", a, b, a / b);
    //printf如果要输出%,则需要使用%%
    printf("%d %% %d = %d\n", a, b, a % b);

    float m = 10.32;
    float n = 4.5;
    printf("%.4f + %.4f = %.4f\n", m, n, m + n);
    printf("%.4f - %.4f = %.4f\n", m, n, m - n);
    printf("%.4f * %.4f = %.4f\n", m, n, m * n);
    printf("%.4f / %.4f = %.4f\n", m, n, m / n);
    //注意:只有整数才能够取余,浮点型数据不能取余
    //printf("%.4f %% %.4f = %.4f\n", m, n, m % n);

    return 0;
}

3 关系运算符
>、<、= =、>=、<=、!=
!=为不等于
一般用于判断条件是否满足或者循环语句
#include <stdio.h>

int main(int argc, char *argv[])
{
    //关系运算符连接的表达式的最终结果只有两个,真和假
    //一般返回的结果使用int保存,如果为假则为0,为真则为非0
    //非0即为真
    int a = 10 > 5;
    int b = 10 < 5;
    printf("a = %d, b = %d\n", a, b);

    return 0;
}

 

注意:关系运算符中==用于判断左右两边是否相等,=用于赋值,将右值赋给左值

 

4 逻辑运算符
1、&& 逻辑与
两个条件都为真,则结果为真
if((a>b) && (a<c))
if(b<a<c)//这种表达方式是错误的
2、|| 逻辑或
两个条件至少有一个为真,则结果为真
if((a>b) || (a<c))
3、! 逻辑非
如果原本表达式为真,则为假,原本表达式为假,则为真
if(!(a>b))
{
}
注意:
在C语言不能这样写表达式10 < a < 100,需要通过逻辑运算符
a > 10 && a < 100
数学中:a<10或者a>100
C语言中:a < 10 || a > 100
逻辑与和逻辑或的短路原则:
#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 20;
    //逻辑与两边的表达式都为真,整体才为真,否则为假
    int ret = a > 10 && a < 19;
    printf("ret = %d\n", ret);

    //逻辑或两边的表达式只要有一个为真,则整理为真,否则都为假才为假
    ret = a > 10 || a < 19;
    printf("ret = %d\n", ret);

    //逻辑与的短路原则:如果第一个表达式的结果为假,则整体表达式为假,则后面所有的表达式都不会执行
    int b = 100;
    ret = (a < 19) && (b += 10);
    printf("b = %d\n", b);

    //逻辑或的短路原则:如果第一个表达式的结果为真,则整体表达式为真,所有后面所有的表达式都不会执行
    ret = (a > 19) || (b += 10);
    printf("b = %d\n", b);

    return 0;
}

5 位运算符
1、 & 按位 与
任何值与0得0,与1保持不变
使某位清0
0101 1011 &
1011 0100
0001 0000
2、 | 按位或
任何值或1得1,或0保持不变
0101 0011 |
1011 0100
1111 0111
3、 ~ 按位取反
1变0,0变1
0101 1101 ~
1010 0010
4、^ 按位异或
相异得1,相同得0
1001 1100 ^
0101 1010
1100 0110
5、位移
>>右移
<< 左移
注意右移分:逻辑右移、算数右移

 

(1)、右移
逻辑右移 高位补0,低位溢出
算数右移 高位补符号位,低位溢出 (有符号数)
-15
1000 1111
1111 0000
1111 11 00 -4
A)、逻辑右移
低位溢出、高位补0
0101 1010 >>3
0000 1011
B)、算数右移:
对有符号数来说
低位溢出、高位补符号位。
1010 1101 >> 3
1111 010 1
0101 0011 >>3
0000 101 0
总结 右移:
1、逻辑右移 高位补0,低位溢出
注:无论是有符号数还是无符号数都是高位补0,低位溢出
2、算数右移 高位补符号位,低位溢出 (有符号数)
注:对无符号数来说,高位补0,低位溢出
对有符号数来说,高位补符号位,低位溢出
在一个编译系统中到底是逻辑右移动,还是算数右移,取决于编译器
(2)、左移<< 高位溢出,低位补0
5<<1
6 条件运算符号
()?():()
如果?前边的表达式成立,整个表达式的值,是?和:之间的表达式的结果
否则是:之后的表达式的结果
A?B:C;
首先判断表达式A的结果,如果结果为真,则执行表达式B,如果表达式A为假,则执行表达式C
条件运算符其实就是一个简单的if else语句
if(A)
{
B;
}
else {
C;
}
案例:
#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 10, b = 20;
    int c;
    c = (a > b) ? (a += 10) : (b += 10);
    printf("c = %d\n", c);
    printf("a = %d, b = %d\n", a, b);

    return 0;
}

7 逗号运算符
(... , ... , ...)
使用逗号隔开的表达式从左向右依次执行,最后的表达式的值是整个运算的结果
例如:A = (B , C , D)
先运行表达式B,再运行表达式C,最后运行表达式D,最终变量A的值为表达式D的值
        
8 自增自减运算符
++ --
将++或者--放在变量的后面
先执行表达式,后自增或自减
将++或者--放在变量的前面
先自增或自减,后执行表达式  
9 运算符优先级表

 

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

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

相关文章

系统移植 网络环境配置和TFTP服务器搭建

目录 网络环境配置 1. 配置windows环境下协议 2. 配置linux环境下的网络 3. 开发板 4. Ping 不通解决办法 搭建TFTP服务器环境搭建 》1.验证tftp服务器环境是否搭建 》2.若是未安装&#xff0c;执行下面命令 》3.修改tftp服务器配置文件 》4.在ubuntu下创建工作目录并…

华为OD机试真题 JavaScript 实现【日志采集系统】【2023Q1 100分】

一、题目描述 日志采集是运维系统的的核心组件。日志是按行生成&#xff0c;每行记做一条&#xff0c;由采集系统分批上报。 如果上报太频繁&#xff0c;会对服务端造成压力&#xff1b;如果上报太晚&#xff0c;会降低用户的体验&#xff1b;如果一次上报的条数太多&#xf…

ffplay播放http-mp4视频提示 “stream 1, offset 0x1f85: partial file“错误

解决办法就是将非交织视频 重新 remux. ffmpeg -i a.mp4 -c copy -movflags faststart a1.mp4 -movflags faststart : 这个是将moov移动到 mp4头部,和remux没有关系. 这样处理也是通过HTTP 流式播放必须要做的一步.

Linux防火墙学习笔记11

iptables扩展动作&#xff1a;TARGET EXTENSION: filter&#xff1a; -j ACCEPT -j DROP -j REJECT -j LOG nat: -j SNAT: 源地址转换 -j MASQUERADE: 转换源地址&#xff08;伪装&#xff09; -j DNAT: 目的地址转换及端口 -j REDIRECT: 转换目标端口 本机端…

Java后端入职第六天,Nginx搭建负载均衡+反向代理

一:需求背景 Nginx相信大家应该不陌生吧!是一个高性能web服务器,可以做负载均衡或者是反向代理,比如,把静态页面直接部署到到html,实现动静分离,一个服务器部署多个服务,缓解服务压力,等等,都可以利用Nginx实现。 1.负载均衡 这个理解比较简单,其实就是压力分摊,…

Aspose.Pdf使用教程:获取PDF文档中的所有注释

Aspose.PDF 是一款高级PDF处理API&#xff0c;可以在跨平台应用程序中轻松生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现&#xff0c;保护和打印文档。无需使用Adobe Acrobat。此外&#xff0c;API提供压缩选项&#xff0c;表创建和处理&#xff0c;图形和图像功能&am…

小马赠书【第7期】清华出版社 IT BOOK 多得活动(送书5本)

本期 敬 之 共精心挑选了 15 本 IT 相关书籍&#xff0c;包含 前端、后端、数据分析、人工智能、python、低代码 等各个领域。关于如何参与等具体活动信息请看活动详情页&#xff0c;以下是 15 本 IT 书籍介绍&#xff1a; 活动详情页&#xff1a;小马赠书【第7期】 1. C《C 高…

Django高级扩展之静态文件和ajax使用

目录 使用静态文件 创建静态文件目录 Settings.py配置 创建css文件 路由与视图 设置路由 视图 模板使用静态文件 调用css 调用js 调用图片 优化路径 加载标签 修改文件路径 修改图片路径 修改js路径 修改css路径 使用Ajax 应用场景 示例 路由 视图 模板…

Koordinator 最佳实践系列:精细化 CPU 编排

作者&#xff1a;乔普、申信 介绍 在云原生环境中&#xff0c;集群提供者常常将不同类型的工作负载部署在同一个集群中&#xff0c;利用不同业务的不同峰值效果&#xff0c;实现资源分时复用&#xff0c;避免资源浪费。然而&#xff0c;不同类型负载之间混合部署常常会导致资…

字符集和java的编码与解码

一、ASCII和GBK字符集 计算机存储一个英文字符需要一个字节。 ASCII字符集&#xff0c;包括128&#xff08;0000000B~1111111B&#xff09;个数据&#xff0c;存储英文字母和字符&#xff0c;对于欧美国家够用。 例如&#xff0c;存储字符’a’&#xff0c;查询ASCII得到为97&a…

Java阶段四Day03

Java阶段四Day03 文章目录 Java阶段四Day03数据处理基本流程代码编写顺序开发DAO层&#xff0c;添加的依赖项配置数据源任务拆解内容管理MySQL中的数据类型和Java属性的类型对照关于MyBatis PlusMyBatis Plus的基本使用关于MyBatis Plus的使用建议汇总如下自动更新时间 关于Pro…

一种不停服的数据迁移方案

一、前言 好的方案是一步步演进出来的。当前最优的系统方案&#xff0c;可能在下一个月、三个月或半年后&#xff0c;就会遇到瓶颈&#xff0c;需要调整自身以便适应新的业务场景。系统的演进就是一个快进版的人类进化史。 我之前负责的一个系统&#xff0c;一开始基本没啥数…

46 最佳实践-性能最佳实践-内存大页

文章目录 46 最佳实践-性能最佳实践-内存大页46.1 概述46.2 操作指导 46 最佳实践-性能最佳实践-内存大页 46.1 概述 相比传统的4K内存分页&#xff0c;openEuler也支持2MB/1GB的大内存分页。内存大页可以有效减少TLB miss&#xff0c;显著提升内存访问密集型业务的性能。ope…

证券行业异构系统众多,微服务和网格如何全都要

在携手网易数帆取得中间件云原生化的创新成果之后&#xff0c;安信证券已在谋划大规模微服务化的布局&#xff0c;以确保信息系统架构走在现代金融科技的前列&#xff0c;支撑业务在未来数智金融竞争中把握主动权。 架构未动&#xff0c;思想先行。安信证券近日在内部组织了一…

安全左移DevSecOps开源工具链建设

开发安全相关技术和产品受到越来越多的关注。行业共识认为&#xff0c;应用系统上线之后进行软件漏洞修复&#xff0c;其修复成本是需求设计阶段修复成本的几十倍。因此&#xff0c;在开发环节&#xff0c;引入相应的安全工具&#xff0c;能够有效的降低漏洞的修复成本&#xf…

vue+el-select下拉实现:全选、反选、清空功能

问题描述&#xff1a; el-select下拉框要求实现全选功能。具体功能包括&#xff1a; 当选择【全选】时&#xff0c;所有选项全部被勾选&#xff1b;当选择【反选】时&#xff0c;已选择选项变为未选择选项&#xff0c;未选项变为已选项当选择【清空】时&#xff0c;所有选项变…

SpringBoot进阶学习?看这篇就够了

相信从事Java开发的朋友都听说过SSM框架&#xff0c;老点的甚至经历过SSH&#xff0c;说起来有点恐怖&#xff0c;比如我就是经历过SSH那个时代未流。当然无论是SSM还是SSH都不是今天的重点&#xff0c;今天要说的是Spring Boot&#xff0c;一个令人眼前一亮的框架&#xff0c;…

作用域详解

作用域详解 1、概念2、分类2.1 全局作用域2.2 局部作用域2.2.1 函数作用域2.2.2 块级作用域2.2.3 块级作用域与函数声明 1、概念 JavaScript中的作用域是指变量、函数和对象在代码中可访问的范围。作用域规定了代码中的标识符&#xff08;变量名、函数名等&#xff09;在何处和…

ansible自动部署zabbix监控平台

目录 ansible端部署 使用ansible配置zabbix-mysql端 使用ansible配置zabbix-server端 使用ansible配置zabbix-agent端 一键部署zabbix Ansible是一款开源的自动化运维工具&#xff0c;可以通过SSH协议远程自动化地执行一些复杂的IT工作&#xff0c;例如程序部署、配置管理、…

Python自动化测试——postman,jmeter接口测试

关于众所postman&#xff0c;jmeter&#xff0c;做自动化测试的我想对这两个词并不陌生。大家都知道postman用来做接口测试很方便,下面我们就用一些例子来演示一下它该如何进行接口测试&#xff1a; 首先我们来介绍一下接口测试的概念&#xff1a; 1、什么是接口测试&#xf…