二进制运算

简介: 基础很重要,与市面上大部分只讲结果的文章(粘贴复制)不同。作者将会亲自带你领会二进制运算的魅力

二进制运算

字节序

  • 针对的是字节(byte) 本文讲的是二进制运算 ,两个不是一个概念,做了解即可

字节序分:大端字节序小端字节序
大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
小端字节序:低位字节在前,高位字节在后,计算机处理这个更快。

网络字节序:使用大端字节序

TCP/IP协议 RFC1700规定使用“大端”字节序为网络字节序,其他不使用大端的计算机要注意了,发送数据的时候必须要将自己的主机字节序转换为网络字节序(即“大端”字节序),接收到的数据再转换为自己的主机字节序。这样就与CPU、操作系统无关了,实现了网络通信的标准化。 —— https://zhuanlan.zhihu.com/p/21388517

补码、反码、原码

  • 原码:用第一位表示符号(0正数,1负数),其余位表示值。(原码是容易被人脑所理解的表达方式)
  • 反码:正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反 (历史的产物,为了表达补码和原码的关系不得不存在)
  • 补码:正数的补码是其本身,负数的补码是在其反码的基础上 + 1(计算机认这个)

    总结一句话就是:正数的 原码 反码 补码 都一样,原码人更好理解,计算机只用补码,反码方便补码与原码之间的转换。

    注意: 当前进制的最小负数无法表示为 反码,原码

二进制运算符

左移,算数右移,逻辑右移

位移操作根据当前进制进行操作,位移右面的值不能大于等于当前进制,在java中,当你指定位移的数大于等于限定的进制时,相当于转了一个大圈,从头开始(有点类似我们使用的%运算)。以8bit举例,当你 >>|>>>|<< 8时,其实相当于啥也没干,负数也是这个原理,当你 >>|>>>|<< -1时 相当于 >>|>>>|<< 7
  • 左移 << 高位移丢,低位补0

    为啥没有算数和逻辑之分? 因为高位第一位是符号位,而左移整体向左移动。符号位都没了,所以算术和逻辑是一样的

  • 算数右移 >> 高位根据符号位补,是1补1,是0补0,低位移丢
  • 逻辑右移 >>>高位补0,低位移丢
// 使用技巧 (以8进制举例):格式(未运算之前的二进制补码 > 运算后的二进制补码=运算后的二进制反码=运算后的二进制原码)
// 位移当前进制 = 位移0
// 偶数<<当前进制-1 永远等于0                      例如: 2 <<  7 = (0000 0010 > 0000 0000=0000 0000=0000 0000)
// 奇数<<当前进制-1 永远等于当前bit能表达的最大负数  例如: 1 <<  7 = (0000 0001 > 1000 0000=无法表示=无法表示)
// 正数>>当前进制-1 永远等于0                      例如: 127>> 7 = (0111 1111 > 0000 0000=0000 0000=0000 0000)
// 负数>>当前进制-1 永远等于-1                     例如:-128>> 7 = (1000 0000 > 1111 1111=1111 1110=1000 0001)
// 正数>>>当前进制-1 永远等于0                     例如: 127>>>7 = (0111 1111 > 0000 0000=0000 0000=0000 0000)
// 负数>>>当前进制-1 永远等于1                     例如:-128>>>7 = (1000 0000 > 0000 0001=0000 0001=0000 0001)

逻辑运算符

在计算机逻辑运算中,只有3种逻辑 & | ~ (与或非) 而其他逻辑比如说 非与 异或 非或,都是基于这三元老组成的 (计算机所有的计算都基于此,加减乘除,圆周率计算....)
在java中 异或被简化为一个符号表示: ^ 而其他逻辑则需要 调用者手动转换 例如 ~(1 & 2)

~是一元运算符,其余都是二元运算符

  • &(与) 两边都为1时为1,否则为0
  • |(或) 两边有一个为1时为1,否则为0
  • ~(非) 为0时为1,为1时为0
  • ^(异或) 两边都相同时为0,否则为1
//使用技巧 (以8进制举例):格式(未运算之前的二进制补码 > 运算后的二进制补码=运算后的二进制反码=运算后的二进制原码) = 十进制结果
// 正数&进制-1 等于%进制,%更好理解 &更快处理  4 & 7 = (0000 0100 & 0000 0111 > 0000 0100=0000 0100=0000 0100) = 4
//                                         8 & 7 = (0000 1000 & 0000 0111 > 0000 0000=0000 0000=0000 0000) = 0
//                                        12 & 7 = (0000 1100 & 0000 0111 > 0000 0100=0000 0100=0000 0100) = 4
// -1&任何数 等于任何数本身                 -1 & 7 = (1111 1111 & 0000 0111 > 0000 0111=0000 0111=0000 0111) = 7
//                                        -1 & 8 = (1111 1111 & 0000 1000 > 0000 1000=0000 1000=0000 1000) = 8
// 两个数^再^其中一个数会得到另一个数        4 ^ 3  = (0000 0100 ^ 0000 0011 > 0000 0111=0000 0111=0000 0111) 7
//                                        7 ^ 4  = (0000 0111 ^ 0000 0100 > 0000 0011=0000 0011=0000 0011) 3
目录
相关文章
|
SQL Oracle 关系型数据库
|
7天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
17天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1327 7
|
5天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
305 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
16天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1400 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应用。
302 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)