学习:原码-反码-补码

文章目录

前提知识

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

  • 原码

数值的二进制即为原码

  • 反码

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

二进制负数的运算

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

相关推荐
CandyU222 分钟前
UE5 C++ 进阶学习 小知识点 —— 01 - 本地化语言
学习·ue5
武陵悭臾1 小时前
Python应用开发学习: Pygame 中实现数字水平靠右对齐和垂直靠底对齐
python·学习·程序人生·游戏·个人开发·学习方法·pygame
Tonya431 小时前
测开学习DAY26
学习
水月wwww2 小时前
vue学习之组件与标签
前端·javascript·vue.js·学习·vue
952362 小时前
数据结构-链表
java·数据结构·学习
找了一圈尾巴2 小时前
软件架构设计学习-基本概念
学习·软件架构
驯狼小羊羔2 小时前
学习随笔-require和import
前端·学习
2301_796512523 小时前
Rust编程学习 - 问号运算符会return一个Result 类型,但是如何使用main函数中使用问号运算符
开发语言·学习·算法·rust
deng-c-f3 小时前
Linux C/C++ 学习日记(47):dpdk(八):UDP的pps测试:内核 VS dpdk
学习
d111111111d3 小时前
STM32外设学习--TIM定时器--编码器接口
stm32·嵌入式硬件·学习