当前位置: 首页 > 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 中常见的一种状态更…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...