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

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

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

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

二、正数三码合一

        首先我们来看正数的二进制原码,我们就有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。

五、总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

思科认证难考吗?思科认证备考方法与技巧分享

思科认证在IT行业具有广泛的认可度,表明持有者拥有专业的技术能力水平,对未来的升职加薪有很大帮助。但在考思科认证之前很多人都担心“思科认证难考吗”这个问题,实际上这主要看你考的认证等级,ccna、ccnp等。此外,考…

代码随想录算法day40 | 动态规划算法part13 | 647. 回文子串,516.最长回文子序列

647. 回文子串 动态规划解决的经典题目,如果没接触过的话,别硬想 直接看题解。 力扣题目链接(opens new window) 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的…

2024/9/25 英语每日一段

“Banning phones or social media is something parents often do as a form of punishment, me included. But in doing so you make the phone even more important, taking on this totemic importance in your child’s eyes,” she says. Goodin says that young people …

基于springboot+vue超市管理系统

基于springbootvue超市管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本无人超市管理系统就是在这样的大环境下诞生,其可以帮助使用者在…

CNN网络训练WISDM数据集:模型仿真及可视化分析

卷积神经网络(CNN)因其强大的特征提取能力和深度学习架构而备受推崇,CNN在处理图像数据时展现出的卓越性能,使其成为解决各种视觉识别任务的首选工具。WISDM数据集是一个广泛用于运动估计研究的基准数据集,它包含了多个…

腾讯邮箱上传附件卡、慢、无法上传问题处理

1、检查文件中转站容量是否已满 2、建议用户打开链接https://exmail.qq.com/qy_mng_logic/wasmHelper?typehashv2,看是否可以正常访问。(能打开下载就表示可以正常访问) 3、让用户切换到4G或者其他网络再重新上传附件是否会重现问题&#xf…

(14)关于docker如何通过防火墙做策略限制

关于docker如何通过防火墙做策略限制 1、iptables相关问题 在Iptables防火墙中包含四种常见的表,分别是filter、nat、mangle、raw。 filter:负责过滤数据包。 filter表可以管理INPUT、OUTPUT、FORWARD链。 nat:用于网络地址转换。 nat表…

FTP服务搭建

FTP服务搭建 yum install vsftp匿名用户模式 备份配置文件,并重新生成一个 mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak cat /etc/vsftpd/vsftpd.conf_bak | grep -v "#" > /etc/vsftpd/vsftpd.conf{local_enableYES write_enableYES …

Redis 分布式缓存服务(集群)

作者:程序那点事儿 日期:2023/11/17 13:05 准备6台虚拟机,ip分别是 192.168.10.101 192.168.10.102 192.168.10.103 192.168.10.104 192.168.10.105 192.168.10.106 创建6个节点 mkdir -p /usr/local/cluster/redis-node1 #对应192.168.10.…

【微服务即时通讯系统】——etcd一致性键值存储系统,etcd的介绍,etcd的安装,etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

Linux 进程与进程状态

目录 1.进程。 1.进程的概念 2.并行和并发 3.并行和并发的区别: 4.PCB(程序控制块) 5.进程组与会话。 6.进程状态。 1.进程。 1.进程的概念 进程是操作系统进行资源分配和调度的一个独立单位。每个进程都运行在操作系统的控制之下&…

心觉:如何重塑高效学习的潜意识(1)两种方法的优缺点

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作180/1000天 你的学习习惯是什么呢 学习的时候是感到轻松吗 很多人感觉现在是知识大爆炸的时代,每天都会产生海量的知…

人工智能助力阿尔茨海默症治疗:微软与上海精神卫生中心的新研究

最近,微软研究院与上海市精神卫生中心合作,基于微软 Azure OpenAI 服务中的多模态大模型,开发了一种名为“忆我”(ReMe)的个性化认知训练框架。这一创新项目旨在通过数字化手段扩展自动化认知训练的范围,为…

Spring MVC 参数校验 总结

1. 简介 Sping MVC提供了参数校验的方便注解。 2.代码 在pom.xml中添加依赖&#xff1a; <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>8.0.0.Final</version&g…

如何提升亚马逊与速卖通的关键词搜索排名?

在电商平台上&#xff0c;一个不可忽视的事实是&#xff0c;大部分消费者&#xff08;超过80%&#xff09;在搜索产品时&#xff0c;主要集中在搜索结果的前两页。如果你的产品未能跻身这些显眼的位置&#xff0c;很可能就会错失大量的潜在客户。因此&#xff0c;提升关键词搜索…

PG duckdb插件 pg_quack部署与使用

一.pg_quack简介 pg_quack 是一个创新的 PostgreSQL扩展&#xff0c;它将 DuckDB-—一个嵌入式列式数据库 管理系统集成到PostgreSQL中。这个开源项目为开发者提供了一种在同一个数据 库环境中利用高性能数据处理和存储的新方式,使得在PostgreSQL在OLAP的性能 上得到了很大的提…

Docker容器常用命令详解

Docker容器常用命令&#xff0c;我们经常使用&#xff0c;又经常忘记&#xff0c;今天我们系统分析一下&#xff1a; 1、查看运行的进程 #列出所有运行的容器 sudo docker ps#列出所有容器&#xff0c;包括运行和停止的 docker ps -a #列出所有容器&#xff0c;并过滤 docker…

【Docker】解决Docker Engine stopped

解决Docker Engine stopped 解决Docker Engine stopped1.检查虚拟设置2 安装wslwindows安装wsl 解决Docker Engine stopped 在安装完docker之后不少用户会遇到Docker Engine stopped。下面就下给出解决方法让docker正常运行起来 1.检查虚拟设置 打开任务管理器查看cpu页面&a…

行业展望:线缆行业发展

线缆行业作为国民经济中最大的配套行业之一&#xff0c;在我国机械工业的细分行业中占据举足轻重的地位&#xff0c;仅次于汽车整车制造和零部件及配件制造业。作为电气化、信息化、智能化社会中重要的基础性配套产业&#xff0c;电线电缆被誉为国民经济的"血管"与&q…

【Python】遇见的问题:为项目选择的 Python 解释器无效

一、问题说明 导入项目文件后&#xff0c;提示“为项目选择的 Python 解释器无效” 二、问题原因 暂时不知道 三、解决办法 第一步&#xff1a;添加本地解释器 第二步&#xff1a;点击确定 位置&#xff1a;当前项目所在目录 基础解释器&#xff1a;python.exe所在目录 第三…