操作符详解(一)(跑路笔记)

简介: 操作符详解(一)(跑路笔记)

前言

扫雷的爆炸展开可能要拖一拖了


刚刚学完操作符不写个笔记记录一下实在可惜。

所以今天搞一下操作符详解的第一部分。


一、操作符分类

运算操作符

分为 加’+’ 减 ‘-’ 乘 ‘*’ 除 ‘/’ 取模 ‘%’

优先级按顺序为 乘大于除大于取模大于加大于减

(取模是得到余数例如 2%3 = 2; 5%3 = 2)


计算机储存整数原理

我们在了解移位操作符的时候必须要先了解计算机储存整数原理:

整数一般以二进制位储存到计算机中

以补码(马上就介绍)的形势存储

我们计算机将整数的二进制位分成了原码 反码 补码

原码就是整数的二进制位比如1的原码就是

00000000000000000000000000000001

整数的原码反码补码相同(都同上方原码)


负数原码例如-1为

10000000000000000000000000000001

image.png

反码为原码按位取反我们只需知道它可以将二进制的0转换为1将1转换为0

image.png

我们需要记得补码是我们操作的对象即可进行下一步的位移操作符介绍。


移位操作符

注: 操作符的对象只能是整数

分别有左移’<<'和右移 ‘>>’ 左移右移都是对补码的二进制位的位移比如 1<<5 位为32就是因为<<是对二进制位进行的操作下面我会用图片进行说明(下面先讲了左移操作符)

image.png

image.png


这个结果就是将1的二进制位整体左移了5位使1变成了32

再比如-5


image.png

我们直接将因左移而出内存的数字去除在右侧补0

右移操作符

“>>”

右移操作符又与左移操作符不同

右移操作时分为两类进行操作


逻辑右移(补上0)

算数右移(补原来的符号位)

(具体是那种右移由编译器决定,常见的编译器大多为算数右移)

先介绍逻辑右移

逻辑右移是将整体右移后在左边补上0

上图!

image.png

我们直接将出内存的二进制舍去不要在空缺的位置补上0

算数右移

同上的逻辑右移我们将出内存的不要在左边补上原来的符号位

位操作符

(只对整数操作,且他们都是对补码进行操作)

& 按位与

| 按位或

^ 按位异或


首先按位与 将两个数字的二进制位进行比较同为一则为一一个为零则为零

上图!

image.png

返回最下方的数字 及3(这里我们不禁疑惑这里的结果是原码还是补码呢?)下面我们用-1 和-3来解答

上图!


image.png

image.png

结果看出是补码打印时依旧要进行转换得到原码。

按位或:(只要有1就为1)

不bb

上图!

image.png

类比按位与得到的结果依旧为补码使用时要记得变成原码。

按位异或 ‘^’

相同为0 相异为1

上图!!!!!

image.png

注意得到的依旧为补码要使用时一定要将它恢复成原码


要注意’^'按位异或有一个特性 如"a ‘^’ b^b" = a;

我们通过图片来解释这个特性

上图!


image.png

我们可以使用这个特性实现不使用临时变量来交换变量的目的

先来看看我们的代码:


int main(void)
{
  int a = 3;
  int b = 5;
  printf("交换前 %d %d\n", a, b);
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  printf("交换后 %d %d", a, b);
  return 0;
}



我们利用上面的特性先使 a =a ^ b; 再使 b = a ^ b 此时的a已经为a ^ b 所以实际上 b = a ^ b ^ b 因为特性所以 此时b = a然后我们使 a = a ^ b 就将原本为a ^ b 的a =a ^ b^ a 就成功了交换了这两个的数值


‘~’ 操作符

对一个数的补码进行按位取反(包括符号位)

上图!



本为0的a经过~就变成了-1.


总结

今天的操作符就到这里吧:

下面进行小结

今天主要讲解了位操作符和移位操作符都是对计算机储存的二进制位进行的操作我们主要要记得

1.正数二进制中原、反、补码相同负数要进行运算

2.我们计算机都是对补码进行运算如果运算出负数记得将它恢复成原码。


相关文章
|
6天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
17天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1320 7
|
5天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
297 129
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
16天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1394 87
|
4天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
5天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
284 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
5天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
232 82
2025年阿里云域名备案流程(新手图文详细流程)