操作符详解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进行沟通的桥梁,负责存储…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...