学习:原码-反码-补码

文章目录

前提知识

正数不需要进行原码反码补码一说,正数就是正数,我们原码反码补码是为了针对负数
(按道理来说其实根本不存在什么码,只有二进制机器码,不过是为了方便计算)

  • 原码

数值的二进制即为原码

  • 反码

将二进制位取反即可,即 0-->1, 1-->0

  • 补码

将原码取反码再加一即为补码

  • 移码

符号码+数值码 = 移码

这里的符号码和数值码在不同环境下又有不一样的叫法,暂且这个名字是最符号的

原码详解

原码是对应数值的二进制码

  • 整数原码

    • 定义
    • 理解:大于0就没什么好说了,小于0为什么是2n - x ?
      比如:x = -0010 他的n=4,所以n表示的是二进制的位数,因此直接取n为2的阶可以比原二进制0010大一个位数,本质其实就是这个,用比该数值大一位的数字去进行减一个负数即加上这个数值,其实就是加一个符号位,即10000,又因为2n - x ,这时候就能看懂了,其实是为了用x小于0这个特性,然后再减去负数即加一个正数,这样就是把2n次幂加进x这个负数中去了,实现了1作为符号位区分出一个负数。(那么整数也是同理只不过用0作为符号位有时候可以不写)
  • 小数原码

    • 定义

    理解:大于0也没什么好说的了,为什么小于0是用1-x?

    比如:-0.1101 比小数点高一位也就只有1了,而且永远是1,所以就是给负数加一个1符号位。

    举一反三:-1.1101,这时候我们这个是大于小数的,那么我们最高位应该是加在1的前面,

    即:1,1.1101,为了容易分辨,教材上都是用逗号对符号位区分,当然计算机中没有逗号,全部都是二进制,只是为了我们认为能分清。


上述解析纯纯原理,其实我们知道负数的原码在符号位上面是1来表示就行


反码

负数的反码符号位不参与反码,将数值位进行反码即可

  • 整数反码表示法:
  • 小数反码表示法:

补码

负数的符号不参与反码运算,对于两个负数的补码相加,如果溢出了,1会被丢弃掉。

  • 整数补码
    • 定义
    • 理解:n一样是表示二进制的位数,为什么要n+1呢?
      原因是后面我们是2n+1 + x,因为x是负数,那么我们在这里采用的是加法,所以其实是减去一个正数,如果只选择高一位减去正数的话我们最高位就会被借位借走变成0,我们负数就不成立了,所以我们需要n+1,这时候就肯定保证了减走一个二进制后还能留下最高位,因为我们选择的是高两位数。
  • 小数补码
    • 定义
    • 理解:其实学到这思考一下与原码定义和上面的整数补码定义就能想到了,我们无非就是用高一位或者高两位进行施法,那么在这里是补码,整数补码是用高两位,那么我们应该想到的是小数部分应该也是要用高两位进行借位留下最高位作为符号位,所以就是(因为x是负数):2 + x

二进制负数的运算

关于负数的二进制运算需要对负数取补码,然后补码之间进行运算,然而正数所有码都一样(不严格来说),所以只需要把负数取补码即可,然后就能正常的像正数一样运算了。

相关推荐
叼烟扛炮7 分钟前
Linux 学习笔记(六十一):网络编程毕业设计——Reactor 反应堆模式
linux·网络·笔记·学习·课程设计
叼烟扛炮2 小时前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
水云桐程序员8 小时前
从零开发软件的步骤,软件开发从零到完成应该怎么做?
笔记·学习·软件构建·个人开发
David猪大卫9 小时前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
叼烟扛炮10 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
叼烟扛炮16 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
Z21-X1 天前
云原生运维学习笔记:容器技术的演进、底层原理与 Docker 全生命周期管理
运维·笔记·学习·云原生
Rabitebla1 天前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
无心水2 天前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd2 天前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习