操作符详解3
✨✨ 欢迎大家来到莉莉的博文✨✨
🎈🎈养成好习惯,先赞后看哦~🎈🎈
前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作
符,今天继续介绍一部分。
目录
1.操作符的分类
2.移位操作符
2.1左移操作符
2.2右移操作符
3.位操作符
4.单目操作符
5.逗号表达式
6.下标访问[]、函数调用()
6.1下标引用操作符 [ ]
6.2函数调用操作符()
1.操作符的分类
•算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << >>
• 位操作符: & | ^
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
• 单目操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引用: []
• 函数调用: ()
• 结构成员访问: . 、->
关系操作符、条件操作符、逻辑操作符:https://blog.csdn.net/wait___wait/article/details/135269329
结构成员访问操作符:https://blog.csdn.net/wait___wait/article/details/136178916
算术操作符、赋值操作符、单目操作符:C语言之操作符1
操作符中有一些操作符和二进制及原码、反码、补码有关系。我们先了解二进制和进制转换的知识https://blog.csdn.net/wait___wait/article/details/136137220
原码、反码、补码:https://blog.csdn.net/wait___wait/article/details/136138289
当然清楚的铁铁也可以不用看啦!

2.移位操作符
>>右移操作符
<<左移操作符
注:移位操作符的操作数只能是整数
警告 :对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:
int num = 10;
num>>-1; //error
2.1左移操作符
移位规则:左边抛弃、右边补0
#include <stdio.h> int main() {int num = 10;int n = num<<1;printf("n= %d\n", n);//20printf("num= %d\n", num);//10return 0; }
最终结果为n ==20, num == 10。
如果想要num的值也改变,则可以使用复合赋值 num <<= 1;
从运行结果可以推出:左移一位有乘2的效果。
2.2右移操作符
移位规则:首先右移运算分两种:
1.逻辑右移:左边用0填充,右边丢弃
2.算术右移:左边用原该值的符号位填充,右边丢弃采用哪种运算规则由编译器决定,常见的编译器采用算术右移
与左移一位类似,右移一位有除2的效果,但也有例外 -1 >> 1的结果还是-1(算术右移)
#include <stdio.h> int main() {int num = 10;int n = num>>1;printf("n= %d\n", n);printf("num= %d\n", num);return 0; }
3.位操作符
位操作符有:
- & //按位与 两个整数对应的二进制位如果有0,则为0
- | //按位或 两个整数对应的二进制位只要有1,则为1
- ^ //按位异或 两个整数对应二进制位,相同为0,相异为1,异或的结果不会溢出,因为不会进位
- ~ //按位取反 所有二进制位按位取反(包括符号位)
注:他们的操作数必须是整数,操作的是二进制位。
按位异或通常的使用公式:
a ^ a==0
a ^ 0==a
位操作符需要与逻辑操作符进行区分:
&& //逻辑或
|| //逻辑与
! //逻辑取反
举例:
#include <stdio.h>
int main()
{int num1 = -3;int num2 = 5;printf("%d\n", num1 & num2);//3printf("%d\n", num1 | num2);//-5printf("%d\n", num1 ^ num2);//-8printf("%d\n", ~0);//-1return 0;
}
分析:
我们知道数据的计算是通过它的补码进行计算的
-3的原码:10000000000000000000000000000011
-3的反码:11111111111111111111111111111100
-3的补码:11111111111111111111111111111101
5的原反补 00000000000000000000000000000101
-3 & 5的补码:00000000000000000000000000000101
由于符号位为0,所以是正数,而正数的原反补相同,因此-3 & 5的结果是3
-3 | 5、-3 ^ 5以此类推,结果为-5、-8
~0的补码:11111111111111111111111111111111
符号位是1,负数,所得补码的原码:10000000000000000000000000000001—> -1
移位操作符和位操作符很重要,总有些题用上它们秒变简单,这里举一些它们的使用场合。
(不能创建临时变量(第三个变量),实现两个数的交换:https://blog.csdn.net/wait___wait/article/details/136143074)

4.单目操作符
单目操作符有这些:
!、++、--、&、*、+、-、~ 、sizeof、(类型)
单目操作符的特点是只有一个操作数,在单目操作符中只有&和*没有介绍,这2个操作符,我们放在学习指针的时候学习。单目操作符 https://blog.csdn.net/wait___wait/article/details/135242898
5.逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式,如果表达式的结果要赋值给另一个变量,则在表达式的外面加上括号。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。//代码1 int a = 1; int b = 2; int c = (a > b, a = b + 10, a, b = a + 1); //逗号表达式 c是多少?//13//代码2 if (a = b + 1, c = a / 2, d > 0)//代码3 冗长 a = get_val(); count_val(a); while (a > 0) {//业务处理a = get_val();count_val(a); } 如果使用逗号表达式,代码3可改写成: while (a = get_val(), count_val(a), a > 0) {//业务处理 }
6.下标访问[]、函数调用()
6.1下标引用操作符 [ ]
下标引用操作符是一个双目操作符,可能你会很奇怪,明明中括号里面就一个操作数,为什么是双目操作符?那我们现在就先来看看它的操作数到底是哪些。
操作数:一个数组名+一个索引值(索引值就是数组的下标)
int arr[10]; //创建数组 arr[9] = 10; //实用下标引用操作符。 [ ]的两个操作数是arr和9
6.2函数调用操作符()
接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。
#include <stdio.h>
void test1()
{printf("hehe\n");
}
void test2(const char* str)
{printf("%s\n", str);
}
int main()
{test1(); //这⾥的()就是作为函数调⽤操作符。test2("hello bit."); //这⾥的()就是函数调⽤操作符。return 0;
}
写作不易,您的认同给与我莫大的鼓励!!!
相关文章:
操作符详解3
✨✨ 欢迎大家来到莉莉的博文✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作 符,今天继续介绍一部分。 目录 1.操作符的分类 2…...
【C语言基础】:操作符详解(一)
文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…...
通俗易懂分析:Vite和Webpack的区别
1、对项目构建的理解 先从浏览器出发, 浏览器是由浏览器内核和JS引擎组成;浏览器内核编译解析html代码和css代码,js引擎编译解析JavaScript代码;所以从本质上,浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…...
OpenCart程序结构与业务逻辑
一、程序业务逻辑说明 在 OpenCart 中,index.php 文件是整个应用程序的入口文件,它负责初始化应用程序并调度请求。以下是 index.php 文件加载执行的流程: 1. **设置路径常量:** - index.php 首先定义了一些重要的路径常量&…...
软件License授权原理
软件License授权原理 你知道License是如何防止别人破解的吗?本文将介绍License的生成原理,理解了License的授权原理你不但可以防止别人破解你的License,你甚至可以研究别人的License找到它们的漏洞。喜欢本文的朋友建议收藏+关注,方便以后复习查阅。 什么是License? 在…...
C/C++实现老鼠走迷宫
老鼠形象可以辨认,可以用上下左右操纵老鼠;正确检测结果,若老鼠在规定的时间内走到粮仓,提示成功,否则提示失败。代码分为3个文件:main.cpp、play.h、play.cpp。 main.cpp: #include <iostream> #include <…...
[Linux]文件基础-如何管理文件
回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作: int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…...
bat 查找文件所在
脚本 在批处理文件(.bat)中查找文件所在的目录,你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例,演示如何在批处理文件中查找指定文件并输出其所在目录: echo off setlocal enabledelayedexpansio…...
程序员的守护神:为何电脑永不熄灭?
在这个信息时代,程序员成了推动社会进步的“隐形英雄”。他们通宵达旦,手指在键盘上跳跃,创造出一个个令人惊叹的数字世界。有趣的是,你可能注意到了一个现象:程序员似乎总是不关电脑。这并非他们对电脑上瘾࿰…...
Kafka快速实战以及基本原理详解
Kafka快速实战以及基本原理详解 基本概念 Kafka是一个分布式、支持分区、多副本,基于ZK的分布式消息系统,最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如Hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎、日…...
微信小程序(4)- 事件系统和模板语法
1. 事件系统 1.1 事件绑定和事件对象 小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过 on 的方式绑定事件,也没有 click 等事件,小程序中绑定事件使用 bind 方法,click 事件也需要使用 tap 事件来进行代…...
【Java多线程】对线程池的理解并模拟实现线程池
目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多,例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是:(提高效率) 1…...
python连接mysql数据库
连接MySQL数据库,通常我们会使用Python的mysql-connector-python库。下面是一个基本的示例来展示如何使用Python连接到MySQL数据库。 首先,确保你已经安装了mysql-connector-python库。如果没有,你可以使用pip来安装它: pip ins…...
docker用法
首先需要去docker官网注册你的账号,记住账号名称和密码; 然后在本地执行: docker login登录OK。 把ubuntu下载到本地: sudo docker pull ubuntusudo docker images输出: REPOSITORY TAG …...
DIcom调试Planar configuration
最近和CBCT组同事调dicom图像 这边得图像模块老不兼容对方得dicom文件。 vtk兼容,自己写得原生解析不兼容。 给对方调好了格式,下次生成文件还会有错。 简单记录下,日后备查。 今天对方又加了 个字段:Planar configuration 查…...
C#与VisionPro联合开发——跳转页面
1、跳转页面并打开相机 From1 所有代码展示 using System; using System.IO; using System.Windows.Forms; //引入VisionPro命名空间 using Cognex.VisionPro;namespace ConnectCamera {public partial class Form1 : Form {public Form1() {InitializeComponent();}CogAcqFif…...
服务端测试开发必备技能:Mock测试
什么是mock测试 Mock 测试就是在测试活动中,对于某些不容易构造或者不容易获取的数据/场景,用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回,返回的数据不满足要求依赖的接口还未开发完成&#…...
vue3中ref创建变量取值时自动补充 .value 插件 volar
插件 TypeScript Vue Plugin (Volar) 设置中配置...
clickhouse的docker部署与springboot整合
注意:镜像bitnami/clickhouse包含服务端和客户端,yandex版本需要使用yandex/clickhouse-server,yandex/clickhouse-server docker启动命令(允许空密码 -e ALLOW_EMPTY_PASSWORD=yes),clickhouse版本不同,配置文件在的位置也会不一样/etc/clickhouse-server/config.xml d…...
Node.js_基础知识(计算机硬件基础)
主机的基本组成 CPU:Central Processing Unit,即中央处理器,是计算机的核心部件。是一块集成电路芯片,能够执行计算机指令并控制计算机的各种操作,负责运算和处理数据内存:是电脑硬件中的一块电路板,用于暂时存储CPU中的运算数据,是计算机与CPU进行沟通的桥梁,负责存储…...
FlowState Lab与SpringBoot集成:构建企业级波动分析微服务
FlowState Lab与SpringBoot集成:构建企业级波动分析微服务 1. 引言:当AI预测遇上微服务架构 电商大促期间的服务器负载波动、金融交易中的异常流量监测、物流系统的季节性需求变化...这些业务场景都需要对时序数据进行实时分析和预测。传统单机版的分析…...
Pixel Mind Decoder 本地开发环境搭建:使用PyCharm进行调试与开发
Pixel Mind Decoder 本地开发环境搭建:使用PyCharm进行调试与开发 1. 准备工作与环境配置 在开始使用PyCharm进行Pixel Mind Decoder的开发之前,我们需要先完成一些基础准备工作。这部分内容将帮助你快速搭建起开发环境,为后续的调试和开发…...
Android 性能优化:内存泄漏排查与解决
Android性能优化:内存泄漏排查与解决 在Android开发中,性能优化是提升用户体验的关键环节,而内存泄漏则是常见却容易被忽视的问题。内存泄漏会导致应用占用内存持续增加,最终引发卡顿、崩溃甚至被系统强制终止。如何高效排查与解…...
Anything to RealCharacters 2.5D转真人引擎:AI艺术展数字作品写实化呈现
Anything to RealCharacters 2.5D转真人引擎:AI艺术展数字作品写实化呈现 你是否曾想过,将那些精美的二次元插画、可爱的卡通头像,或者充满想象力的2.5D游戏角色,一键变成栩栩如生的真人照片?这听起来像是电影里的特效…...
英语从句全攻略:名词性、定语、副词性从句一网打尽(含易错点分析)
英语从句全攻略:名词性、定语、副词性从句一网打尽(含易错点分析) 当你读到一篇地道的英文文章时,是否曾被那些"套中套"的句子结构难住?从句就像英语语法中的俄罗斯套娃,层层嵌套却暗藏规律。作为…...
超表面全息显示入门避坑指南:为什么你的G-S算法迭代不收敛?
超表面全息显示实战:G-S算法迭代不收敛的7个关键修复策略 当你第一次在MATLAB里跑通G-S算法时,那种成就感就像解开了宇宙的密码——直到重建图像出现雪花般的噪点,或者迭代2000次后相关系数仍在0.5徘徊。这不是你的错,大多数教程都…...
DeepSeek-R1-Distill-Qwen-7B效果展示:复杂问题推理实测
DeepSeek-R1-Distill-Qwen-7B效果展示:复杂问题推理实测 1. 模型能力概览 DeepSeek-R1-Distill-Qwen-7B是DeepSeek团队基于Qwen架构开发的7B参数推理模型,通过强化学习训练和知识蒸馏技术优化,在数学推理、代码生成和逻辑分析任务上展现出卓…...
Bidili Generator效果展示:宠物肖像生成——毛发细节+神态捕捉实测
Bidili Generator效果展示:宠物肖像生成——毛发细节神态捕捉实测 1. 引言:当AI遇见宠物肖像 你有没有想过,给自家宠物拍一张专业级的肖像照?不是那种随手一拍的生活照,而是能捕捉到它们独特神态、展现每一根毛发细节…...
别再用鼠标点来点去了!用JavaScript原生DOM操作实现按钮高亮切换(附完整代码)
别再用鼠标点来点去了!用JavaScript原生DOM操作实现按钮高亮切换(附完整代码) 在Web开发中,交互式按钮状态管理是最基础却最常被忽视的技能之一。很多开发者习惯依赖jQuery或前端框架提供的便捷方法,却对原生JavaScrip…...
OpenClaw+GLM-4.7-Flash数据助手:Excel报表自动生成与分析
OpenClawGLM-4.7-Flash数据助手:Excel报表自动生成与分析 1. 为什么需要自动化数据助手 作为一位经常与Excel报表打交道的分析师,我每天要花大量时间重复执行数据清洗、格式转换和基础分析。最痛苦的是每月底需要手动合并十几个分公司的销售数据&#…...


最终结果为n ==20, num == 10。
