学习:原码-反码-补码

文章目录

前提知识

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

  • 原码

数值的二进制即为原码

  • 反码

将二进制位取反即可,即 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

二进制负数的运算

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

相关推荐
蒙奇D索大25 分钟前
【11408学习记录】考研数学攻坚:行列式本质、性质与计算全突破
笔记·学习·线性代数·考研·机器学习·改行学it
moxiaoran575333 分钟前
uni-app学习笔记二十四--showLoading和showModal的用法
笔记·学习·uni-app
DartistCode1 小时前
动手学深度学习pytorch(第一版)学习笔记汇总
pytorch·深度学习·学习
汤姆和佩琦1 小时前
LLMs基础学习(八)强化学习专题(1)
深度学习·学习·强化学习·马尔可夫决策过程
代码小将2 小时前
java中static学习笔记
java·笔记·学习
虾球xz2 小时前
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
开发语言·c++·物联网·学习
Y3174293 小时前
python Day46 学习(日志Day15复习)
python·学习·机器学习
学不会就看3 小时前
selenium学习实战【Python爬虫】
python·学习·selenium
CIb0la3 小时前
Ai自动补全编程工具:llama vscode
运维·开发语言·学习·测试工具·程序人生
2301_804774493 小时前
回溯算法学习
学习