首页 > 编程语言 >源码补码与反码

源码补码与反码

时间:2022-11-21 13:56:19浏览次数:40  
标签:存储 反码 0001 补码 源码 机器 原码

title: 源码补码与反码
comments: true
date: 2022-11-21 13:24:55
tags: java
category: 

计算机底层存储数据时使用的是二进制数字,但是计算机在存储一个数字时并不是直接存储该数字对应的二进制数字,而是存储该数字对应二进制数字的补码。所以接下来我们需要来了解一下原码反码补码

  • 机器数:一个数在计算机的存储形式是二进制数,我们称这些二进制数为机器数,机器数是有符号,在计算机中用机器数的最高位存放符号位,0表示正数,1表示负数。
  • 机器数的真值:因为带有符号位,所以机器数的形式值不等于其真值,以机器数1000 0111为例,其真正表示的值为-7,而形式值为135。将带符号的机器数的真正表示的值称为机器数的真值。

原码

原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值,例如的十进制的的正负1,用8位二进制的原码表示如下:

【+1】= 原:[ 0000 0001 ]

【-1】= 原:[ 1000 0001 ]

反码

反码的表示方法为:

  • 正数的反码是其原码本身。
  • 负数的反码是在其原码的基础上,符号位不变,其余各位取反。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ]

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ]

补码

补码的表示方法为:

  • 正数的补码是其原码本身。
  • 负数的补码是在其原码的基础上,符号位不变,其余各位取反后加1(即在反码的基础上加1)。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ] = 补:[ 0000 0001 ]

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ] = 补:[ 1111 1111 ]

数据在计算机中的存储形式

计算机实际只存储补码, 所以原码转换为补码的过程,也可以理解为数据存储到计算机内存中的过程:

img

在原、反、补码中,正数的表示是一模一样的,而负数的表示是不相同的,所以对于负数的补码来说,我们是不能直接用进制转换将其转换为十进制数值的,因为这样是得不到计算机真正存储的十进制数的,所以应该将其转换为原码后,再将转换得到的原码进行进制转换为十进制数。(机器数包含符号位)

标签:存储,反码,0001,补码,源码,机器,原码
From: https://www.cnblogs.com/wandaren/p/16911188.html

相关文章

  • Spring-boot-源码-BeanMetadataElement
    org.springframework.beans.BeanMetadataElement接口BeanMetadataElement/**Interfacetobeimplementedbybeanmetadataelementsthatcarryaconfiguration......
  • 没必要阅读 Vue 源码吧?
    Vue的渐进式设计使得它非常容易上手,在最简单的情况下,我们只需要引入Vue的JS文件,然后newVue()即可使用声明式渲染。Vue的文档编写也比较优秀,方便使用者一步一步深入......
  • IDEA中给源码添加自己注释——private-notes插件安装使用
    一、前言我们在空闲之余喜欢研究一些经典框架的源码,发现没办法把自己的注释添加上。会给出提示:​​​Fileisread-only​​​很烦,但是为了安全考虑也是没有办法的!这是一......
  • 命令源码文件
    我们已经知道,环境变量GOPATH指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件。这里的源码文件又分为三种,即:命令源码文件、库源码文件和测试......
  • [C# 中的序列化与反序列化](.NET 源码学习)
    [C#中的序列化与反序列化](.NET源码学习)关键词:序列化(概念与分析)   三种序列化(底层原理源码)   Stream(底层原理源码)   反射(底层原理源码)假如有一天我们要......
  • Vue3 reactive 之源码的实现
    Reflect.get()方法与从对象(target[propertyKey])中读取属性类似,但它是通过一个函数执行来操作的。exportconstreactive=<Textendsobject>(target:T)=>{......
  • 源码包扫描
    源码包扫描#importrequestsimportsubprocessimportos,refromurllib.parseimporturlparsefrommultiprocessing.poolimportThreadPoolpool=ThreadPool(10......
  • k8s源码分析3-kubectl命令行设置7大命令分组
    本节重点总结:设置cmd工厂函数f,主要是封装了与kube-apiserver交互客户端用cmd工厂函数f创建7大分组命令,如下基础初级命令BasicCommands(Beginner):基础中级命......
  • nydusd 源码理解(一)
    “尝试通过nydus[1]源码理解工作流程。可能由于代码变动导致和本文记录的内容有出入。1.环境准备gitclonehttps://github.com/dragonflyoss/image-service.gitc......
  • JDK源码分析实战系列-PriorityQueue
    完全二叉树一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则......