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

简单学习 原码反码补码 学会了你才是真正的程序员了

一、简单介绍原码反码补码

        首先我们需要知道的是原码反码补码是一个人为的行为,因为机器看的都是所谓的补码,这个反码只是作为补码的到原码也就是人能看懂的跳板,所以计算机无论是计算器里面的东西还是他底层运行的二进制代码都是补码,一定要记住只有原码是给人看的。

        再次强调一遍,只有原码是给人类看的,计算机看的是补码,而反码是跳板。

二、正数三码合一

        首先我们来看正数的二进制原码,我们就有8bit来看,也就是一个字节,在C语言里面那就是一个char,在java里面那就是一个byte的大小,当然我们算int也是可以扩充开来去看一样的,而且要记住的一点我们这里是有正负数的也就是说char的上限就是从[-128,127]的这么一个范围,然后int也就是[-2,147,483,648, 2,147,483,647],所以说我们的都是signed不是unsigned,是有符号的整型。

        然后我们根据我们的标题来看,三码合一,也就是三个码是一样的。

原码=反码=补码

我们看二进制的情况,比如我们先给定一个数字为8,那他的二进制,我们用8位和32位都展示一下。

0000 1000

0000 0000 0000 0000 0000 0000 0000 1000

这下大家应该能知道为什么要选择8位了吧,当然我们自然是可以作用在所有整型类型上的。

我们再来看一个比如说7。

0000 0111

然后根据我们正数的特性三码合一,也就是这个是原码但是又是补码和反码。

我们也可以查看一下计算器里面的程序员选项。

三、负数三码不同

1.原码

        既然正数是三码合一的,那负数呢,自然是不同的,负数我们有个所谓的符号位,在最左边,可以标记出是否为负数,也就是我们-7就是,原码就是正常的7然后符号位是有一位的。

1000 0111

这个就是-7的原码,但是大家不要急着用计算器去搞,因为弄不出来的,他给你显示的是补码。

2.反码

        既然名字都叫反码,所以我们的反码也是非常的简单的,就是翻转我们所有的位数除了符号位,也就是说-7的反码就是。

1111 1000

这个就是-7的反码,除了符号位之外翻转,我们细细看一下区别。

1000 0111        原码

1111 1000        反码

这个就是反码,但是反码只是跳板,最终我们要获取到补码才行。

3.补码

        补码就是反码+1,补码=反码+1,非常的简单,如此操作。

1111 1000        反码

1111 1001        补码

所以这个1111 1001就是我们-7的补码,也就是计算器里面显示的-7我们可以看一下。

相信大家现在已经会算负数了,然后我们再来一个训练,比如我们的1101 1101这个是补码,我们要获得原码应该如何计算呢?

是不是直接先-1变成反码然后再除了符号位翻转然后我们就可以读出这个是什么了。

1101 1101        补码

1101 1100        反码

1010 0011        原码

符号位变成负号,-35。

大家如果想验证最后变出来的原码是否为正确,除了直接算之外,也可以使用计算器,我们掐掉符号位,再丢入计算器里面的位数即可获得正确答案。

然后我们就会算负数了,这下我们就可以进行位运算了。

四、位运算

我们位运算顾名思义就是每个位进行运算。

1.与运算

与运算的口诀是全一出一,有0出0,可以简单理解为乘法,符号是&记住是&而不是&&,两个&的短路与,不是正常的与运算。

1&1=1

1&0=0

0&1=0

0&0=0

比如我们来个15 & 7那他的答案就是。

0000 1111

0000 0111 &

0000 0111

答案也就是7,大家可以自己用编程语言测试一下。而且不要忘记了这里的运算的15和7已经变成了补码,而且计算出来的结果也是补码。

我们再来一个,-15&7。

1000 1111        -15原

1111 0000        -15反

1111 0001        -15补

0000 0111 &     7原=7反=7补

0000 0001        1补=1反=1原

所以答案就是1。

假如我们再来一个,-15&-8。

1000 1111        -15原

1111 0000        -15反

1111 0001        -15补

1000 1000        -8原

1111 0111         -8反

1111 1000         -8补

1111 0001 &     -15补

1111 0000        ?补

1110 1111        ?反

1001 0000        -16原

2.或运算

或运算的口诀就是有一出一,没一出零,符号是|两个是短路或。

1|1=1

1|0=1

0|1=1

0|0=0

会了与运算之后或运算也和明了了,比如来个-15|7和6|3

1111 0001        -15补(因为前面一直用的15相信大家也会算了,所以这里直接用补码)

0000 0111 |      7补=7反=7原

1111 0111        ?补

1111 0110        ?反

1000 1001        -9原

0000 0110        6补=6反=6原

0000 0011 |      3补=3反=3原

0000 0111        7补=7反=7原

3.异或运算

异或运算则是不同出1,相同出0,符号是^。

1^1=0

1^0=1

0^1=1

0^0=0

那我们就随便来一个继续-15 ^ 2。

1111 0001        -15补

0000 0010 ^     2补=2反=2原

1111 0011        ?补

1111 0010        ?反

1000 1101        -13原

4.非运算(取反)

顾名思义就是取反操作,符号是~,这个是不需要多个进行运算的,就是单纯的所有位数翻转我们继续以-15举例

1000 1111        -15原

1111 0000        -15反

1111 0001        -15补

取反之后

0000 1110        14补=14反=14原

所以答案就是14。

五、总结

不要忘记计算机所有的运算都是建立在补码的过程上的,所以要进去运算的也是补码,运算出来的也是补码,计算器里面显示的也是补码,你想要变成我们人类自己定义的原码,那就得进行上述的转换。

如果对你有帮助的话不要忘记点赞收藏。

相关文章:

简单学习 原码反码补码 学会了你才是真正的程序员了

一、简单介绍原码反码补码 首先我们需要知道的是原码反码补码是一个人为的行为,因为机器看的都是所谓的补码,这个反码只是作为补码的到原码也就是人能看懂的跳板,所以计算机无论是计算器里面的东西还是他底层运行的二进制代码都是补码&#x…...

基于规则的命名实体识别

基于规则的命名实体识别(Rule-Based Named Entity Recognition, NER)是一种通过预定义的模式或规则来识别文本中特定实体的方法。这种方法通常使用正则表达式来匹配文本中的实体。下面是一个更完整的示例,展示了如何使用正则表达式来识别文本…...

C语言从头学63—学习头文件stdlib.h(二)

6、随机数函数rand() 功能:产生0~RAND_MAX 之间的随机整数。 使用格式:rand(); //无参 返回值:返回随机整数 说明: a.RAND_MAX是一个定义在stdlib.h里面的宏,表示可以产生的最大随机整数&am…...

js判断一个对象里有没有某个属性

1. 使用in操作符 in操作符可以用来检测属性是否存在于对象或其原型链中。 const obj {a: 1, b: 2}; if (a in obj) { console.log(属性a存在于obj中); } else { console.log(属性a不存在于obj中); } 2. 使用hasOwnProperty()方法 hasOwnProperty()方法用来检测一个…...

Python(爬虫)正则表达式

正则表达式是文本匹配模式,也就是按照固定模式匹配文本 一、导入 re模块是Python环境的内置模块,所以无需手动安装。直接在文件中导入即可: import re 二、正则表达式基础知识 . 匹配除换行符以外的任意字符 ^ 匹配字符串的开始 $ 匹配字…...

Linux:进程(二)

目录 一、cwd的理解 二、fork的理解 1.代码共享 2.各司其职 3.fork的返回值 三、进程状态 1.进程排队 2.进程状态 运行状态 阻塞状态 挂起状态 一、cwd的理解 cwd(current working directory)。译为当前工作目录。 在C语言中,使用…...

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】

在上一篇文章中,我们已经理顺了实现流程。 接下来,我们将在UE5中,从头开始一步一步地构建一次流程。 通过这种方法,我们可以借助一个熟悉的开发环境,使那些对着色器不太熟悉的朋友们更好地理解着色器的工作原理。 这篇…...

【OceanBase 诊断调优】—— GC问题根因分析

GC 流程涉及到 RS 的状态切换和 LS 的资源安全回收,流程上较长。且 GC 线程每个租户仅有一个,某个日志流 GC Hang 死时会卡住所有其余日志流的 GC,进而造成更大的影响。 本文档会帮助大家快速定位到 GC 故障的模块,直达问题核心。…...

图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中,经常需要获取感兴趣区域的面积属性,下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…...

指挥平台在应急场所中的主要表现有哪些

在应对自然灾害、公共安全事件等突发危机时,指挥平台作为应急管理体系的核心枢纽,其重要性不言而喻。它不仅承载着信息的快速汇聚、精准分析与高效调度功能,更在应急场所中有一定的关键表现。接下来就跟着北京嘉德立一起了解一下。 一、信息集…...

智能养殖场人机交互检测系统源码分享

智能养殖场人机交互检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…...

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall 数据集-目标检测系列-海洋鱼类检测数据集 fish 数据量:1W 数据项目地址: gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/…...

网络威慑战略带来的影响

文章目录 前言一、网络威慑的出现1、人工智能带来的机遇二、网络空间的威慑困境1、威慑概念的提出2、网络威慑的限度3、人类对网络威胁的认知变化4、网络空间的脆弱性总结前言 网络威慑是国家为应对网络空间风险和威胁而采取的战略。冷战时期核威慑路径难以有效复制至网络空间…...

决策树算法在机器学习中的应用

决策树算法在机器学习中的应用 决策树(Decision Tree)算法是一种基本的分类与回归方法,它通过树状结构对数据进行建模,以解决分类和回归问题。决策树算法在机器学习中具有广泛的应用,其直观性、易于理解和实现的特点使…...

Leetcode面试经典150题-39.组合总数进阶:40.组合总和II

本题是扩展题,真实考过,看这个题之前先看一下39题 Leetcode面试经典150题-39.组合总数-CSDN博客 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数…...

ProcessOn为什么导出有水印!!!(利用SVG转PNG)

processon-svg2png ProcessOn 一个非常好用的思维导图网站,但是为什么导出有水印!!!。 功能 支持按钮拖拽支持将流程图svg 转成 png下载支持修改自定义文字下载svg(开发中) 安装/使用方法 安装并使用…...

插入、更新与删除MySQL记录

在现代应用开发中,数据库操作是非常重要的一环。作为程序员,熟练掌握数据库的增删改功能,能够更有效地管理数据并提高开发效率。 本课程将围绕插入、更新与删除记录这三个操作展开,涵盖SQL中的常见语句:INSERT INTO、UPDATE 和 DELETE,并结合实际应用中的常见问题讨论如…...

【ARM】armv8的虚拟化深度解读

Type-1 hypervisor Type-1虚拟化也叫做Bare metal, standalone, Type1 Type2 hypervisor Type-2虚拟化也叫做hosted, Type-2 VM和vCPU(虚拟机和虚拟cpu) 在一个VM(虚拟机)中有多个vCPU,多个vCPU可能属于同一个Vritual Processor。 EL2…...

9/24作业

1. 分文件编译 分什么要分文件编译? 防止主文件过大,不好修改,简化编译流程 1) 分那些文件 头文件:所有需要提前导入的库文件,函数声明 功能函数:所有功能函数的定义 主函数:main函数&…...

Leetcode 106. 从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7], postorder [9,15,7,20,3] 输出:[3…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...