首页 > 其他分享 >机器数存储(原码、反码、补码、移码表示范围、浮点数对阶)

机器数存储(原码、反码、补码、移码表示范围、浮点数对阶)

时间:2024-02-21 10:57:03浏览次数:29  
标签:反码 浮点数 补码 移码 0000 2n 原码

机器数:各种数值在计算机中表示的形式,其特点是使用二进制计数制,数的符号用0和1表示,小数点则隐含,不占位置。

机器数有无符号数和带符号数之分。无符号数表示正数,没有符号位。带符号数最高位为符号位,正数符号位为0,负数符号位为1

真值:机器数对应的实际数值。

原码、反码、补码

正数:原码=反码=补码

负数:原码是绝对值的原码,然后把最高位(符号位)改为1;反码=(除符号位外)原码按位取反;补码=(除符号位外)反码+1。

0:分为+0和-0

+0:原码:0000 0000;反码:0000 0000;补码:0000 0000

-0:原码:1000 0000;反码:1111 1111;补码:0000 0000(溢出后舍弃最高位)

移码

补码首位(即符号位)取反。移码用作浮点运算的阶码。


机器字长为n时,各种码制的表示范围(定点整数):

原码:n位数最高位是符号位,剩下(n-1)位表示数值大小,此时可表示 2n-1-1 个数,所以最小负数是 -(2n-1-1)。同理,最大正数为 2n-1-1。即原码的表示范围是 -(2n-1-1)~ +(2n-1-1) 。

反码:和原码一样,反码的表示范围也是 -(2n-1-1)~ +(2n-1-1) 。

补码:+0、-0的反码都是 0000 0000,所以补码的表示范围是  -(2n-1)~ +(2n-1-1) 

  补码参考:关于进制补码的八位取值范围为什么是-128~127和补码-128的求取_补码为什么是-128到127-CSDN博客为什么用二进制补码所能表示的数据范围比原码多一个数据单位(为什么8位二进制的补码取值范围是-128~127)_补码取值范围为什么大一位-CSDN博客

移码:+0、-0的反码一样, 所以移码也一样。所以移码的表示范围和补码一样,都是  -(2n-1)~ +(2n-1-1) 。

机器字长为n时,各种码制的表示范围(定点小数):可参考(定点小数的取值范围是怎么推算出来的? - 知乎 (zhihu.com)

比如 0011 0011 是一个8位原码,此时它是一个整数,小数点位于最右侧(可以看做0011 0011.0),把它化为小数是 0.011 0011(最高位是符号位),数据向右移动了 n-1 位(相当于小数点向左移动了 n-1 位)。数据右移=小数点左移=除以2n-1

所以定点小数的表示范围就是【整数的表示范围除以2n-1

整数原码范围:-(2n-1-1)~ +(2n-1-1) 。

定点小数原码范围:-(1-1/2n-1) , 1/2n-1可以表示为2-(n-1),所以范围是 -(1-2-(n-1))~+(1-2-(n-1))

同理,整数反码范围: -(2n-1-1)~ +(2n-1-1),定点小数反码范围  -(1-2-(n-1))~+(1-2-(n-1))

同理,整数补码范围:  -(2n-1)~ +(2n-1-1) ,定点小数补码范围 -1~+(1-2-(n-1))

同理,移码补码范围:  -(2n-1)~ +(2n-1-1) ,定点小数移码范围 -1~+(1-2-(n-1))


 浮点数运算

浮点数的表示方法是 尾数*2阶码,尾数是纯小数,阶码是纯整数。正数表示为0.1xxxx,负数表示为1.0xxxx

对阶:使两个数的阶码相同,小阶向大阶看齐,较小阶码增加几位,尾数就右移几位。

尾数计算:相加,如果是减法则加负数;

结果规格化:即尾数规格化,带符号数尾数转换为1.0xxx或0.1xxx。

数据右移=小数点左移=除以2n-1

小阶向大阶看齐 例子:

  • 0101,数据左移两位=乘以2^2=0100,丢失高位,不能忍受
  • 数据右移两位=除以2^2=0001,丢失低位,只影响精度,可以忍受

标签:反码,浮点数,补码,移码,0000,2n,原码
From: https://www.cnblogs.com/sunshine233/p/18024493

相关文章

  • KOA2框架原码解析和实现
    什么是koa框架?koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度高。它更express相比,它是一个更轻量的node框架,因为它所有功能都通过插件实现,这种插拔式的架构设计模式,很符合unix哲学。koa框架现在更新到了2.x......
  • JavaScript 内置 Number 类型在处理浮点数时的精度问题 是如何造成的?
    JavaScript内置的Number类型在处理浮点数时的精度问题主要是由以下原因造成的:IEEE754浮点数标准:JavaScript中的数字是基于IEEE754标准实现的双精度浮点数(64位),其中:最高1位为符号位(0表示正数,1表示负数)。接下来的11位用于存储指数部分(范围大约从-1022到1023)。剩余的......
  • 无符号整数和浮点数的文法
    目录无符号整数的文法浮点数的文法在编写无符号整数(UnsignedInteger)和浮点数(FloatingPointNumber)的文法时,我们通常使用BNF(巴科斯-瑙尔范式)或EBNF(扩展巴科斯-瑙尔范式)等描述形式语言的工具。这些工具提供了一种简洁的方式来定义语法规则。以下是无符号整数和浮点数的一种可能......
  • 15张图带你深入理解浮点数
    本着「要学习就系统透彻的学」这个原则,本文通过图的方式尽可能详细的讲解浮点数,让大家能够对浮点数有一个更深层次的认识。本文目录: 0、几个问题开始之前请思考如下问题:二进制0.1,用十进制表示的话是多少?十进制的0.1,用二进制表示又是多少?为什么0.1+0.2=0.300000000......
  • 串口收发浮点数加示例代码(共用体)
    #include"stdio.h"#include"string.h"unionData{charstr[4];//float占用4个字节所以给四个字符floatnum;};intmain(){unionDatasend_data,receive_data;send_data.num=43.43;//通过串口发送43.43,只需要放入共用体里面,然后通过发送四个char数据,下面是......
  • 原码、反码、补码、移码
    原码、反码、补码、移码背景:为了解决计算机中减法计算的问题,因为计算机中只有加法器,减法的计算是要转换成加法才能进行。原码二进制首位为标志位正数标志位为00xxxxxxx负数标志位为11xxxxxxx示例:14=00001110-21=10010101反码正数:原......
  • JAVA之浮点数的比较
    一、浮点数比较概述由于计算机内部浮点数精度的原因,使得本来应该相等的两个浮点数可能存在微小的误差,所以对于浮点数之间浮点数之间的等值判断,我们不能用==来进行比较。通常情况下,对于浮点数比较,我们通常指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的。二、JS......
  • 进制转换和原码、反码、补码
    进制转换进制介绍进制转换第一组:其它进制—>十进制二进制转十进制八进制转十进制十六进制转十进制第二组:十进制—>其它进制十进制转二进制规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。十进制转八进制规则:将该数......
  • 计算机编程中的黑魔法编程是什么?如何求解一个浮点数的平方根倒数?计算机中的浮点数是如
    原视频:没有显卡的年代,这群程序员用4行代码优化游戏最原始的求解目标:(求一个浮点数的开方的导数)浮点数在计算机中的表示形式:对数的运算法则:A为a在计算机中的表示形式(二进制表示形式):求浮点数的平方根倒数的应用场景:这个情况,直白的说就......
  • 关于二进制的原码、补码和反码,以及表示范围、常见位运算符和进制转换的理解与简述
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/17963363出自【进步*于辰的博客】参考笔记一,P3.13、P5.1;笔记三,P43.1/3、P44.1。注:我暂且没有整理关于二进制、原码、补码和反码等概念的理论,本文中的阐述都基于我对相应......