三种机器数,原码,补码,反码

2024-05-04 08:18

本文主要是介绍三种机器数,原码,补码,反码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。

     无符号数:即没有符号的数,在寄存器中每一位均可用来存放数值。

     有符号数:即有符号的数,在寄存器中需要留出相应的位置来存放符号位。

  

      因此,即使寄存器的位数相同,甚至是在同一个寄存器中,所能表示的无符号数和有符号数的数值范围是不同的。对于同一串二进制码来说,看成有符号数,无符号数,原码,补码,正常来说,换算成十进制都是不一样的,而看成是哪一种码,则是由程序员来规定的。

 

原码:原码是机器数中最简单的一种表示形式,符号位为0的表示正数,符号位为1表示负数,数值位即真值的绝对值,故原码表示又称为带符号的绝对值表示。

 

整数原码的定义:

        [x]原= 0,x  (2^n >x>=0)  

        [X]原 =2^n-x( 0>=x>-2^n)

 例子:

          当x=+1110 时,[x]原=0,1110

          当 x=-1110 时,[x]原 =2^4-(-1110)=1,1110 (用逗号将符号位和数值部分隔开)

 

   小数的原码定义:

         [x]原=x  (1>x>=0)   

         [x]原=1-x (0>=x>-1)

例子:

          当x=0.1101 时, [x]原=0.1101

          当x=-0.1101 时, [x]原=1-(-0.1101)=1.1101

根据以上的定义,如果已知原码,很显然就可以求真值了。

 

补码:补码的出现时为了更好的实现数值运算,因为如果用原来来计算你必须先确定数的正负,绝对值大小等。(大家可以去搜索一下补码是怎么来的,或者搜索一下补数的概念。)

整数补码的定义:

         [x]补=0,x  (2^n>x>=0)

         [x]补=2^(n+1)+x (0>x>-2^n)注意和原码的区别

例子:

         当 x=+1010 时, [x]补=0,1010

         当 x=-1101 时,[x]补=2^(n+1)+x =10000-1101=1,0011

小数的补码定义:

          [x]补= x  (1>x>=0)

          [x]补=2+x (0>x>=-1)

例子:

            当 x=0.1001 时, [x]补=0.1001

            当 x=-0.0110 时,[x]补=2+x=10.0000-0.0110=1.1010

 

反码 :反码通常用来作为由原码求补码或者由补码求原码的中间过渡。

     整数反码的定义:

          [x]反=0,x (2^n>x>=0)

          [x]反=(2^(n+1)-1)+x (x>=0>-2^n)

例子:

        当 x=+1101时,[x]反=0.1101

        当 x=-1101 时,[x]反=100000-1-1101=1,0010

   小数反码的定义:

        [x]反=x  (1>x>=0)

       [x]反=(2-2^(-n))+x  (0>=x>-1)

例子:

        当 x=+0.0110时,  [x]反=0.0110

        当 X=-0.0110时,  [x]反=10.0000-0.0001-0.0110=1.1001

 

PS:补码比原码,反码能多表示一个数 “-1”,请问这是为什么,提示:从”0”下手。

参考书籍:《计算机组成原理》作者:唐朔飞 , 高等教育出版社第二版

 

 

这篇关于三种机器数,原码,补码,反码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958735

相关文章

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时