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

算法-二进制和位运算

一.二进制

(1).无符号数:

无符号数是一种数据表示方式,它只表示非负整数,即没有符号位,所有的位都用来表示数值大小。在 C++ 等编程语言中,常见的无符号类型有 unsigned intunsigned char 等。例如,一个 8 位的无符号整数 unsigned char 可以表示范围为 0 到 255 的整数,而不像有符号的 char 可以表示 -128 到 127 的范围。

对于一个无符号整数,可以使用除 2 取余法手动将其转换为二进制表示。以下是一个简单的 C++ 示例:

#include <iostream>
#include <string>std::string binaryRepresentation(unsigned int num) {std::string binaryStr;while (num > 0) {binaryStr = std::to_string(num % 2) + binaryStr;num /= 2;}return binaryStr;
}int main() {unsigned int num = 10;std::string binary = binaryRepresentation(num);std::cout << binary << std::endl;  // 输出 "1010"return 0;
}

(2).有符号数:

计算机中一般利用补码表示法:

  • 对于正数,其补码与原码相同。
  • 对于负数,补码是在反码的基础上加 1。
  • 例如,对于一个 8 位的有符号整数:
    • +5 的补码表示为 00000101(与原码相同)。
    • -5 的补码
    • 表示为 11111011(反码 11111010 加 1)。

对于一个使用补码表示的有符号二进制数,将其转换为十进制数的步骤如下:

  1. 判断正负

    • 首先,观察补码的最高位(符号位)。如果最高位为 0,则该数为正数,直接将补码转换为十进制即可。
    • 如果最高位为 1,则该数为负数,需要先将补码转换为原码,再将原码转换为十进制。
  2. 正数的转换(原码和补码相同)

    • 对于正数,直接将二进制数按权展开求和,即从右到左用二进制位上的数字乘以 ( 从  开始,从右向左递增),然后将结果相加。
    • 例如,对于 8 位补码表示的正数 01011010,转换为十进制为:
  3. 负数的转换(从补码到原码)

    • 对于负数,先对补码取反(包括符号位),然后加 1,得到原码。
    • 再将原码按权展开求和,最后加上负号。
    • 例如,对于 8 位补码表示的负数 10101101
      • 先取反得到 01010010
      • 再加 1 得到原码 01010011
      • 转换为十进制为:-(0x27+1x2+0x25+1x24+0x23+0x22+1x21+1x2)=-83

二.位运算

位运算符是一种操作二进制位的运算符,它们直接对操作数的二进制表示进行操作。在大多数编程语言中,常见的位运算符包括:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。这些运算符通常用于对整数类型的数据进行操作,因为整数在计算机中是以二进制形式存储的。

(1)按位与&

  • 按位与运算符 & 对两个操作数的每个二进制位进行逻辑与操作。如果两个相应的二进制位都为 1,则结果为 1;否则,结果为 0。
  • 示例(C++):
  • #include <iostream>
    using namespace std;int main() {int a = 5;  // 二进制表示为 0101int b = 3;  // 二进制表示为 0011int result = a & b;  // 结果为 0001,即十进制的 1cout << result << endl;  // 输出 1return 0;
    }

    (2)按位或|

    • 按位或运算符 | 对两个操作数的每个二进制位进行逻辑或操作。如果两个相应的二进制位中至少有一个为 1,则结果为 1;否则,结果为 0。
  • 示例(C++)
  • #include <iostream>
    using namespace std;int main() {int a = 5;  // 二进制表示为 0101int b = 3;  // 二进制表示为 0011int result = a | b;  // 结果为 0111,即十进制的 7cout << result << endl;  // 输出 7return 0;
    }

    (3)按位异或^

  • 按位异或运算符 ^ 对两个操作数的每个二进制位进行逻辑异或操作。如果两个相应的二进制位不同,则结果为 1;如果相同,则结果为 0。
  • 示例(C++)
  • #include <iostream>
    using namespace std;int main() {int a = 5;  // 二进制表示为 0101int b = 3;  // 二进制表示为 0011int result = a ^ b;  // 结果为 0110,即十进制的 6cout << result << endl;  // 输出 6
    }

    (4).按位取反~

    • 按位取反运算符 ~ 对操作数的每个二进制位取反,即 0 变为 1,1 变为 0。
  • 示例(C++)
  • #include <iostream>
    using namespace std;int main() {int a = 5;  // 二进制表示为 0101int result = ~a;  // 结果为 1010,即十进制的 -6cout << result << endl;  // 输出 -6return 0;
    }

(5)左移<<

  • 功能
    • 左移运算符 << 将左操作数的二进制表示向左移动右操作数指定的位数。右侧空出的位用 0 填充。
  • 示例(C++)
  • #include <iostream>
    using namespace std;int main() {int a = 5;  // 二进制表示为 0101int result = a << 2;  // 结果为 010100,即十进制的 20cout << result << endl;  // 输出 20return 0;
    }

    (6)右移>>

  • 功能
    • 右移运算符 >> 将左操作数的二进制表示向右移动右操作数指定的位数。对于无符号整数,左侧空出的位用 0 填充;对于有符号整数,根据不同的编程语言和机器,可能用符号位填充(算术右移)或用 0 填充(逻辑右移)。
  • 示例(C++)
  • #include <iostream>
    using namespace std;int main() {int a = 5;  // 二进制表示为 0101int result = a >> 1;  // 结果为 0010,即十进制的 2cout << result << endl;  // 输出 2return 0;
    }

相关文章:

算法-二进制和位运算

一.二进制 &#xff08;1&#xff09;.无符号数&#xff1a; 无符号数是一种数据表示方式&#xff0c;它只表示非负整数&#xff0c;即没有符号位&#xff0c;所有的位都用来表示数值大小。在 C 等编程语言中&#xff0c;常见的无符号类型有 unsigned int、unsigned char 等。…...

OpenAI Chatgpt 大语言模型

OpenAI 一个美国人工智能研究实验室&#xff0c;由非营利组织 OpenAI Inc&#xff0c;和其营利组织子公司 OpenAI LP 所组成。该组织于 2015 年由萨姆阿尔特曼、里德霍夫曼、杰西卡利文斯顿、伊隆马斯克、伊尔亚苏茨克维、沃伊切赫萨伦巴、彼得泰尔等人在旧金山成立&#xff0…...

SpringBoot【九】mybatis-plus之自定义sql零基础教学!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE mybatis-plus的基本使用&#xff0c;前两期基本讲的差不多&#xff0c;够日常使用&#xff0c;但是有的小伙伴可能就会抱怨了&#xff0c;若是遇到业务逻辑比较复杂的sq…...

C#,人工智能,深度学习,目标检测,OpenCV级联分类器数据集的制作与《层级分类器一键生成器》源代码

一、目标识别技术概述 1、摘要 目标检测是计算机视觉中最基本和最具挑战性的问题之一&#xff0c;它试图从自然图像中的大量预定义类别中定位目标实例。深度学习技术已成为直接从数据中学习特征表示的强大策略&#xff0c;并在通用目标检测领域取得了显著突破。鉴于这一快速发…...

调度系统:Luigi 的主要特性和功能

Luigi 是一个开源的 Python 工作流管理工具&#xff0c;用于构建批处理作业管道&#xff0c;特别适用于数据工程领域。它被设计用来编排任务和处理任务间的依赖关系&#xff0c;支持自动化复杂的 ETL 流程、数据分析、模型训练等任务。 Luigi 的主要特性和功能&#xff1a; 任…...

C# 探险之旅:第二节 - 定义变量与变量赋值

欢迎再次踏上我们的C#学习之旅。今天&#xff0c;我们要聊一个超级重要又好玩的话题——定义变量与变量赋值。想象一下&#xff0c;你正站在一个魔法森林里&#xff0c;手里拿着一本空白的魔法书&#xff08;其实就是你的代码编辑器&#xff09;&#xff0c;准备记录下各种神奇…...

AUTOSAR:SOME/IP 概念

文章目录 1. 用例与需求1.1 典型用例1.2 对中间件的要求 2. 协议栈示例3. SOME/IP 概念3.1 中间件整体功能与架构3.2 服务组成元素详细解释 4. 服务发现机制深入剖析5. 总结 1. 用例与需求 1.1 典型用例 信息娱乐系统&#xff1a; 后座娱乐系统连接&#xff1a;允许后排乘客连…...

循序渐进kubenetes Service(Cluster ip、Nodeport、Loadbalancer)

文章目录 部署一个web服务Kubernetes Port ForwardKubernetes ServicesClusterIP ServiceNodePort ServiceLoadBalancer Service 部署一个web服务 准备 Kubernetes 集群后&#xff0c;创建一个名为 web 的新 namespace&#xff0c;然后在该 namespace 中部署一个简单的 web 应…...

深入理解 Apache Shiro:安全框架全解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

mac 安装CosyVoice (cpu版本)

CosyVoice 介绍 CosyVoice 是阿里研发的一个tts大模型 官方项目地址&#xff1a;https://github.com/FunAudioLLM/CosyVoice.git 下载项目&#xff08;非官方&#xff09; git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 进入项目 cd CosyVoic…...

币安移除铭文市场的深度解读:背后原因及其对区块链行业的影响

引言&#xff1a; 就在昨天&#xff0c;2024年12月10号&#xff0c;币安宣布将移除铭文市场&#xff08;Inscriptions Market&#xff09;。这一消息引发了全球加密货币社区的广泛关注&#xff0c;尤其是在比特币NFT和数字收藏品市场快速发展的背景下。铭文市场自诞生以来迅速…...

深度学习实战野生动物识别

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对野生动物数据集进行训练和优化&#xff0c;该数据集包含丰富的野生动物图像样…...

windows安装使用conda

在Windows系统上安装和使用Conda的详细步骤如下&#xff1a; 一、下载Conda安装包 访问Conda的官方网站Anaconda | The Operating System for AI&#xff0c;点击“Downloads”按钮。在下载页面&#xff0c;选择适合您系统的安装包。通常&#xff0c;对于Windows系统&#xf…...

手机租赁系统开发全流程解析与实用指南

内容概要 在如今快速发展的科技时代&#xff0c;手机租赁系统已经成为一种新兴的商业模式&#xff0c;非常符合当下市场需求。那么&#xff0c;在开发这样一个系统的时候&#xff0c;首先要从需求分析和市场调研开始。在这一阶段&#xff0c;你需要了解用户需要什么&#xff0…...

SpringBoot 开发—— YAML文件深度分析

文章目录 一、YAML概述二、数据表示三、YAML 的语法四、YAML 的应用五、YAML 与其他格式的比较1、YAML vs .properties文件可读性和结构数据类型支持扩展性和灵活性使用场景性能和支持2、YAML vs. JSON3、YAML vs. XML六、使用 YAML 的注意事项七、总结YAML 是非常流行的一种配…...

复合机器人整体解决方案

复合机器人是一种集成移动机器人和协作机器人两项功能为一身的新型机器人&#xff0c;更符合人们想象中“脑、眼、手、脚”融合的机器人终极形态。复合机器人的整体解决方案通常涉及多个方面&#xff0c;包括机器人本体、控制系统、感知系统、执行系统以及周边配套设备等。以下…...

【Oracle11g SQL详解】日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等

日期和时间函数&#xff1a;SYSDATE、TO_DATE、TO_CHAR 等 在 Oracle 数据库中&#xff0c;日期和时间函数用于处理日期和时间数据。它们在记录创建时间、分析时间间隔、格式化输出等场景中非常重要。本文将详细讲解常用的日期和时间函数及其应用。 一、SYSDATE&#xff1a;获…...

VSCode设置字体

参考文章&#xff1a;【面向小白】vscode最佳实践&#xff08;2&#xff09;—— 字体设置&#xff08;fira code更纱黑体&#xff09;&#xff0c;这篇文章末尾给了安装字体的链接。 配置的字体还是很好看的。 ‘Fira Code Retina’, ‘Sarasa Mono Sc’ 需要注意的一个点&am…...

shell编程入门之提取字符并设置rtc时间

awk用法 awk是一款文本处理工具&#xff0c;通常在Unix和Linux操作系统中使用&#xff0c;用于以行为单位对文本进行处理和操作。它可以读取输入文本&#xff0c;对其进行处理&#xff0c;生成报表、统计信息等&#xff0c;并将结果输出到标准输出设备中。 它主要有以下特点&…...

react 不可变数据更新(Immutable Update)合并对象 类似与Java 的BeanUtils.copyProperties‌

{ ...state, // 保留原有的 state 的其他部分data: { ...state.data, // 保留 state.data 中的其他字段...action.payload // 使用 action.payload 覆盖 state.data 中需要更新的字段} }这段代码是 Redux 中常见的一种状态更…...

Translategemma-27b-it与OCR结合:图片翻译完整流程

Translategemma-27b-it与OCR结合&#xff1a;图片翻译完整流程 1. 引言 想象一下这样的场景&#xff1a;你在异国旅行时看到一份精美的菜单&#xff0c;却因为语言障碍而不知道点什么&#xff1b;或者在研究国外产品时&#xff0c;标签上的说明文字完全看不懂。传统的翻译工具…...

高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析

高效一键构建&#xff1a;DoL-Lyra整合包的智能自动化构建系统解析 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity游戏的美化整合包配置而烦恼吗&#xff1f;您是否曾因手…...

Qwen3-14B私有部署镜像算法题求解助手:从理解到实现

Qwen3-14B私有部署镜像算法题求解助手&#xff1a;从理解到实现 1. 为什么算法工程师需要AI助手 算法工程师和求职者每天都要面对各种算法问题&#xff0c;从简单的排序到复杂的动态规划。传统方式下&#xff0c;我们需要反复查阅资料、手动编写测试用例、调试代码&#xff0…...

teler IDS v3前瞻:eBPF技术与teler-waf集成带来的革命性变革

teler IDS v3前瞻&#xff1a;eBPF技术与teler-waf集成带来的革命性变革 【免费下载链接】teler Real-time HTTP Intrusion Detection 项目地址: https://gitcode.com/gh_mirrors/te/teler teler IDS作为一款实时HTTP入侵检测系统&#xff0c;在网络安全领域已经建立了坚…...

大数据-253 离线数仓 - Airflow 入门与任务调度实战:DAG、Operator、Executor 部署排错指南

TL;DR 场景&#xff1a;面向离线数仓与定时任务场景&#xff0c;快速理解 Airflow 的核心概念、DAG 编排方式与基础命令。结论&#xff1a;本文内容适合作为 Airflow 入门示例&#xff0c;但代码与命令明显偏旧&#xff0c;需区分 Airflow 1.x 与 2.x 版本差异。产出&#xff…...

BGE-M3优化指南:CPU环境下提升语义分析推理速度的3个技巧

BGE-M3优化指南&#xff1a;CPU环境下提升语义分析推理速度的3个技巧 1. 引言 在当今企业级AI应用中&#xff0c;语义相似度分析已成为知识检索、智能客服和内容推荐等场景的核心技术。BAAI/bge-m3作为当前最强大的开源语义嵌入模型之一&#xff0c;以其卓越的多语言支持和长…...

Phi-4-mini-reasoning应用场景:密码学协议安全性逻辑推演与攻击路径模拟

Phi-4-mini-reasoning应用场景&#xff1a;密码学协议安全性逻辑推演与攻击路径模拟 1. 模型概述 Phi-4-mini-reasoning是由微软开发的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。该模型主打"小参数、强推理、长上下文、低延…...

SpringBoot微服务架构:集成AnythingtoRealCharacters2511实现分布式转换服务

SpringBoot微服务架构&#xff1a;集成AnythingtoRealCharacters2511实现分布式转换服务 1. 引言 想象一下&#xff0c;一个电商平台每天需要处理成千上万的动漫风格商品图片&#xff0c;想要将它们转换为真实人像风格来提升商品吸引力。传统方案要么依赖人工设计效率低下&am…...

Zotero插件版本兼容性问题深度解析:从冲突到解决方案

Zotero插件版本兼容性问题深度解析&#xff1a;从冲突到解决方案 【免费下载链接】zotero-format-metadata Linter for Zotero. An addon for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and item lang…...

如何用OpenRGB终结RGB灯光控制混乱:终极跨平台解决方案

如何用OpenRGB终结RGB灯光控制混乱&#xff1a;终极跨平台解决方案 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB. Relea…...