原码、反码和补码之间的转换

news2024/10/6 12:20:25
  • (꒪ꇴ꒪(꒪ꇴ꒪ ),hello我是祐言
  • 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
  • 快上🚘,一起学习!
  • 送给读者的一句鸡汤🤔:
  • 集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

一、认识原码反码补码

        原码、补码和反码是用来表示有符号整数的三种表示方法,它们在计算机中常用于进行数值运算和存储。

 1.原码(Sign-Magnitude Representation)

        最高位为符号位(0 表示正数,1 表示负数),其余位表示数值部分。
        例如,正数 +5 的原码为 00000101,负数 -5 的原码为 10000101。


2.反码(One's Complement Representation)

        正数的反码与其原码相同。
        负数的反码是将其原码中除符号位外的每一位取反(0 变为 1,1 变为 0)。
        例如,正数 +5 的反码为 00000101,负数 -5 的反码为 11111010。


3.补码(Two's Complement Representation)

        正数的补码与其原码相同。
        负数的补码是在其反码的基础上加 1。
        这里要注意一点:补码的最高位仍然表示符号位。
        例如,正数 +5 的补码为 00000101,负数 -5 的补码为 11111011。


二、计算机中补码表示法特点

  • 可以同时表示正数和负数,且不需要额外的符号位,简化了数值运算和逻辑判断。
  • 补码的加法和减法操作可以使用相同的硬件电路,简化了计算机的设计。
  • 补码的溢出操作符合模运算的性质。

        在进行原码、反码和补码之间的转换时,需要注意以下几点:

        (1)由于负数的补码是在其反码的基础上加 1,所以对于负数,要先将其转换为反码,然后再加 1 得到补码。
        (2)对于补码,将其减 1 可以得到其反码,再将反码的每一位取反可以得到原码。
        (3)这些表示法的选择取决于具体的应用和计算机系统的设计,补码表示法是最常用的一种,因为它简化了数值运算和编码逻辑,且可以有效地处理负数溢出。


示例展示:

程序:

#include <stdio.h>

// 原码转换为反码
int originalToComplement(int original) {
    if (original >= 0) {
        return original;
    } else {
        return ~original;
    }
}

// 反码转换为原码
int complementToOriginal(int complement) {
    if (complement >= 0) {
        return complement;
    } else {
        return ~complement;
    }
}

// 原码转换为补码
int originalToTwosComplement(int original) {
    if (original >= 0) {
        return original;
    } else {
        return ~original + 1;
    }
}

// 补码转换为原码
int twosComplementToOriginal(int twosComplement) {
    if (twosComplement >= 0) {
        return twosComplement;
    } else {
        return ~twosComplement + 1;
    }
}

int main() {
    int num = -5;

    int complement = originalToComplement(num);
    int original = complementToOriginal(complement);
    int twosComplement = originalToTwosComplement(num);
    int originalFromTwosComplement = twosComplementToOriginal(twosComplement);

    printf("原码:%d\n", num);
    printf("反码:%d\n", complement);
    printf("补码:%d\n", twosComplement);
    printf("从补码转换回原码:%d\n", originalFromTwosComplement);

    return 0;
}

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DataEase中点数据集,报Data source connection exception: Access denied for user错误

【现象】&#xff1a; 2023-07-12 10:53:19,436 DEBUG .DeEngineMapper.selectByExampleWithBLOBs: 137 - < Total: 1 java.sql.SQLException: Access denied for user ****** (using password: YES)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965…

MySQL基础篇第8章(聚合函数)

文章目录 1、聚合函数介绍1.1 AVG和SUM函数1.2 MIN和MAX函数1.3 COUNT函数 2、GROUP BY2.1 基本使用2.2 使用多个分组2.3 GROUP BY中使用WITH ROLLUP 3、HAVING3.1 基本使用3.2 WHERE和HAVING的对比 4、SELECT的执行过程4.1 查询的结构4.2 SELECT执行顺序4.3 SQL的执行原理 1、…

【MQ】Windows上RabbitMQ的安装与启动

文章目录 下载Erlang安装RabbitMQ 下载Erlang RabbitMQ基于Erlang语言&#xff0c;因此使用RabbitMQ之前需要先安装Erlang&#xff0c;如下 Erlang语言下载 这里我是用的是25.2.2这个版本&#xff0c;我的机器是64bit的&#xff0c;所以下win64的即可。 下载完毕安装包之后点…

Wholebody 3D keypoint估计:从H3WB开始

目录 前言一、&#xff28;&#xff13;&#xff37;&#xff22;1.下载2.标注格式3.任务分析验证评估 总结 前言 这份工作是首次尝试去检测&#xff13;D全人体姿态的工作&#xff0e;我们使用的数据集是基于Human3.6M的&#xff13;&#xff24;全人体关键点数据集&#xff…

【宝塔】宝塔部署ThinkPHP项目

最近搞了个培训教育的小程序&#xff0c;后端服务用的是ThinkPHP。使用的过程中&#xff0c;发现对于这种小项目用php还是很不错的选择&#xff0c;开发便捷&#xff0c;轻量级。宝塔神器也是很不错的&#xff0c;值得推荐使用。 下面介绍一下项目中用宝塔部署ThinkPHP项目&…

USB枚举过程详解

1 USB枚举流程 1.1 USB枚举流程 USB SETUP command的状态阶段的状态包是个ZLP。 Anchor chips -> Netchip -> PLX -> Avago -> Broadcom The USB3380 is EOL and the kits that were by Taiwan Bplus. PLX USB3380设备控制器使用2个32bit寄存器存放setup的8个字节&…

数据库-表的增删改查

这里写目录标题 新增&#xff08;Create&#xff09;查询条件查询运算符逻辑运算符分页查询 修改&#xff08;Update&#xff09;删除&#xff08;Delete&#xff09; 注释&#xff1a;在SQL中可以使用“–空格描述”来表示注释说明 新增&#xff08;Create&#xff09; 语法…

spark3新特性之动态分区裁剪

Spark3.0为我们带来了许多令人期待的特性。Spark中的静态分区裁剪在介绍动态分区裁剪之前&#xff0c;有必要对Spark中的静态分区裁剪进行介绍。因此&#xff0c;在这种情况下&#xff0c;我们不能再应用静态分区裁剪&#xff0c;因为filter条件在join表的一侧&#xff0c;而对…

【小米的技术分享】拯救程序员的“救命稻草”:Git回滚命令大揭秘!

大家好&#xff0c;我是小米。作为一名热爱技术的程序员&#xff0c;经常使用Git进行版本控制是我们的家常便饭。但是&#xff0c;难免会遇到一些意外&#xff0c;比如不小心提交了错误的代码或者合并了错误的分支&#xff0c;这时候就需要用到Git回滚命令了。今天&#xff0c;…

chrome谷歌浏览器书签不同步的解决办法

背景&#xff1a;多台电脑使用时&#xff0c;发现浏览器书签并没有及时同步&#xff0c;找到最终的解决办法&#xff1a; 第1步&#xff1a;chrome地址栏中输入&#xff1a; chrome://sync-internals/ 第2步&#xff1a;点击 Disable Sync (Clear Data) 点击Request Start 第3…

马上掌握的LayUI树形权限菜单,助力你的权限管理!

目录 一、树形菜单的介绍 1、什么是树形菜单&#xff1f; 二、实现思路流程 三、实现步骤 1、查看数据 1&#xff09;表数据 2&#xff09; 最终效果 2、编程 1&#xff09;实体类编写 2&#xff09;PermissionDao编写&#xff08;难点&#xff09; 第一 在线转json…

vue+springboot基于Web的电子产品销售系统设计与实现 gqon2a

随着人们生活水平的高速发展&#xff0c;电子产品销售方面在近年来呈直线上升&#xff0c;人们也了解到电子产品的实用性&#xff0c;因此电子产品的销售数量也逐年递增&#xff0c;电子产品销售的增加加大了在管理上的工作难度。为了能更好的维护电子产品销售管理秩序&#xf…

Grafana 图形面板定制方案

Grafana 在一个 Panel 中添加多数据源同时展示以及修改通过 transform 修改图表图例的方式。 多个数据在一个折线图中 在 Grafana 中我们可能会希望多个数据在一个Panel 中展示&#xff0c;比如&#xff1a; 通过编辑 Panel 增加 Query 数据我们即可做到&#xff1a;像上面中…

SQL数据库连接类型与常用函数

目录 1. 创建表插入数据 2. 连接类型 2.1 内连接 2.2 外连接 2.2.1 左外连接 2.2.2 右外连接 2.3 交叉连接 2.4 子查询&公用表达式 2.5 UNION连接 3. SQL常用函数 3.1 CASE WHEN函数 3.2 COALESCE函数 3.3 NULLIF函数 3.4 LEAST 和 GREATEST函数 3.5 DISTINCT…

LayUi之树形结构的详解(附有全案例代码)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一. 什么是树形结构 二.树形结构在什么时…

表格编程之争:Python VS VBA?Excel用户:新编程语言才真香

Python和VBA哪个更好用&#xff1f; Python和VBA是两种不同的编程语言&#xff0c;它们都有自己的特点和优缺点。在表格编程方面&#xff0c;VBA在Excel中的应用非常广泛&#xff0c;可以通过宏来实现自动化操作和数据处理&#xff0c;也可以通过VBA代码来实现自定义函数和界面…

python qt安装软件包

安装 opencv pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装pyqt5 pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装pyqt5-tools pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/

RLHF-基于人类反馈的强化学习

RLHF 文章目录 RLHF强化学习基础回顾为什么要使用基于人类反馈的强化学习大纲RLHF的起源大预言模型中的RLHF案例 ChatGPT RLHF中的技术细节预训练语言模型训练奖励模型基于RL进行微调 RLHF 的未来 强化学习基础回顾 智能体通过采取行动与环境进行交互&#xff0c;并返回状态和奖…

【C语言督学营 第十八天】考研408排序大题初探(将排序思想融入题目)

文章目录 题目一分析代码实战 题目二分析代码实战 补充(快排与归并)数据结构大题注意点&#xff01;&#xff01;&#xff01;(评分标准) 题目一 分析 (1&#xff09;算法的基本设计思想 由题意知&#xff0c;将最小的nl2个元素放在Ai中&#xff0c;其余的元素放在A2中&#x…

FreeRTOS实时操作系统(十三)任务通知

系列文章目录 文章目录 系列文章目录任务通知任务通知值和通知状态任务通知值通知状态 任务通知API函数发送通知函数接收通知函数 实验测试模拟二值信号量实验模拟计数型信号量模拟事件标志组实验模拟消息邮箱实验 任务通知 任务通知&#xff1a;用来通知任务的&#xff0c;任…