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

操作符详解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

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作 符&#xff0c;今天继续介绍一部分。 目录 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、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…...

OpenCart程序结构与业务逻辑

一、程序业务逻辑说明 在 OpenCart 中&#xff0c;index.php 文件是整个应用程序的入口文件&#xff0c;它负责初始化应用程序并调度请求。以下是 index.php 文件加载执行的流程&#xff1a; 1. **设置路径常量&#xff1a;** - index.php 首先定义了一些重要的路径常量&…...

软件License授权原理

软件License授权原理 你知道License是如何防止别人破解的吗?本文将介绍License的生成原理,理解了License的授权原理你不但可以防止别人破解你的License,你甚至可以研究别人的License找到它们的漏洞。喜欢本文的朋友建议收藏+关注,方便以后复习查阅。 什么是License? 在…...

C/C++实现老鼠走迷宫

老鼠形象可以辨认&#xff0c;可以用上下左右操纵老鼠;正确检测结果&#xff0c;若老鼠在规定的时间内走到粮仓&#xff0c;提示成功&#xff0c;否则提示失败。代码分为3个文件&#xff1a;main.cpp、play.h、play.cpp。 main.cpp: #include <iostream> #include <…...

[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作&#xff1a; int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…...

bat 查找文件所在

脚本 在批处理文件&#xff08;.bat&#xff09;中查找文件所在的目录&#xff0c;你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例&#xff0c;演示如何在批处理文件中查找指定文件并输出其所在目录&#xff1a; echo off setlocal enabledelayedexpansio…...

程序员的守护神:为何电脑永不熄灭?

在这个信息时代&#xff0c;程序员成了推动社会进步的“隐形英雄”。他们通宵达旦&#xff0c;手指在键盘上跳跃&#xff0c;创造出一个个令人惊叹的数字世界。有趣的是&#xff0c;你可能注意到了一个现象&#xff1a;程序员似乎总是不关电脑。这并非他们对电脑上瘾&#xff0…...

Kafka快速实战以及基本原理详解

Kafka快速实战以及基本原理详解 基本概念 Kafka是一个分布式、支持分区、多副本&#xff0c;基于ZK的分布式消息系统&#xff0c;最大的特性就是可以实时的处理大量数据以满足各种需求场景&#xff0c;比如Hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎、日…...

微信小程序(4)- 事件系统和模板语法

1. 事件系统 1.1 事件绑定和事件对象 小程序中绑定事件与在网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过 on 的方式绑定事件&#xff0c;也没有 click 等事件&#xff0c;小程序中绑定事件使用 bind 方法&#xff0c;click 事件也需要使用 tap 事件来进行代…...

【Java多线程】对线程池的理解并模拟实现线程池

目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多&#xff0c;例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是&#xff1a;&#xff08;提高效率&#xff09; 1…...

python连接mysql数据库

连接MySQL数据库&#xff0c;通常我们会使用Python的mysql-connector-python库。下面是一个基本的示例来展示如何使用Python连接到MySQL数据库。 首先&#xff0c;确保你已经安装了mysql-connector-python库。如果没有&#xff0c;你可以使用pip来安装它&#xff1a; pip ins…...

docker用法

首先需要去docker官网注册你的账号&#xff0c;记住账号名称和密码&#xff1b; 然后在本地执行&#xff1a; docker login登录OK。 把ubuntu下载到本地&#xff1a; sudo docker pull ubuntusudo docker images输出&#xff1a; REPOSITORY TAG …...

DIcom调试Planar configuration

最近和CBCT组同事调dicom图像 这边得图像模块老不兼容对方得dicom文件。 vtk兼容&#xff0c;自己写得原生解析不兼容。 给对方调好了格式&#xff0c;下次生成文件还会有错。 简单记录下&#xff0c;日后备查。 今天对方又加了 个字段&#xff1a;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 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…...

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进行沟通的桥梁,负责存储…...

基于python框架的大学生创新创业项目管理系统vue

目录功能模块分析项目管理模块评审管理模块资源协同模块技术实现要点数据安全方案扩展性设计项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作功能模块分析 用户管理模块 角色划分&#xff1a;学生、导师、管理员&#xff08;支…...

基于OFA的智能写作助手:图文内容自动生成与问答

基于OFA的智能写作助手&#xff1a;图文内容自动生成与问答 1. 引言 你有没有遇到过这样的情况&#xff1a;手头有一堆产品图片&#xff0c;却不知道怎么写吸引人的商品描述&#xff1b;或者看到一张复杂的图表&#xff0c;想要快速提取关键信息却无从下手&#xff1b;又或者…...

写作压力小了!2026最新AI论文写作工具测评与推荐

2026年真正好用的AI论文写作工具&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

3分钟快速上手:ComfyUI-WanVideoWrapper视频生成AI终极指南

3分钟快速上手&#xff1a;ComfyUI-WanVideoWrapper视频生成AI终极指南 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 还在为复杂的视频生成工具配置而头疼吗&#xff1f;ComfyUI-WanVideoWrap…...

别再用鼠标点来点去了!用JavaScript原生DOM操作实现按钮高亮切换(附完整代码)

别再用鼠标点来点去了&#xff01;用JavaScript原生DOM操作实现按钮高亮切换&#xff08;附完整代码&#xff09; 在Web开发中&#xff0c;交互式按钮状态管理是最基础却最常被忽视的技能之一。很多开发者习惯依赖jQuery或前端框架提供的便捷方法&#xff0c;却对原生JavaScrip…...

RStudio Server部署与运维实战:从零搭建到高效管理

1. 环境准备&#xff1a;搭建RStudio Server的基石 在开始部署RStudio Server之前&#xff0c;我们需要确保服务器环境已经准备就绪。就像盖房子需要打地基一样&#xff0c;这一步决定了后续所有工作的稳定性。我遇到过不少因为环境问题导致的安装失败案例&#xff0c;大多数都…...

当经典耦合器原理‘失灵’时:我在ADS里另辟蹊径优化90度电桥的实战记录

当经典耦合器原理‘失灵’时&#xff1a;我在ADS里另辟蹊径优化90度电桥的实战记录 射频工程师们对90度耦合电桥的设计规范早已烂熟于心——那些教科书上的理想模型、对称结构和完美参数。但当我在3.5GHz频段用Rogers 4003C板材实现时&#xff0c;仿真结果却总与理论预测相差甚…...

导师严选!盘点2026年最强的的降AI率网站

轻松降低论文AI率在2026年已不再是天方夜谭。以下是2026年最炸裂、实测效果显著的降AI率网站神器&#xff0c;覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景&#xff0c;帮你稳妥搞定毕业论文。 一、全流程王者&#xff1a;一站式搞定论文全链路 这类工具…...

【具身智能06】具身智能多模态感知与传感器融合:从看见到理解

06_具身智能多模态感知与传感器融合 关键词 多模态感知,传感器融合,触觉传感器,力觉传感器,时空对齐,环境建模,IMU,视觉-触觉融合,深度感知一、引言&#xff1a;从单模态感知到多模态融合的必然之路 具身智能机器人的本质是在物理世界中行动,而行动的前提是感知。传统的工业机器…...

从TKMath到STL导出:一份OCCTProxy for .NET的模块化封装实战笔记

从TKMath到STL导出&#xff1a;OCCTProxy for .NET的模块化封装实战 在工业软件开发的深水区&#xff0c;几何内核的封装从来都不是简单的语法转换。当我们需要将OpenCASCADE这样的庞然大物引入.NET生态时&#xff0c;C/CLI就像一座精心设计的悬索桥&#xff0c;既要承受原生代…...