32位浮点数转换为十进制
- 格式:doc
- 大小:52.00 KB
- 文档页数:7
流量计计算机通过485端口以MODBUS协议把内部IEEE32位浮点数传送到DCS的数据经过研究试验,其数据格式如下数据请求依次为:十六进制从站地址:01;读命令:03;数据起始高位地址:0F;数据起始低位地址:A0;(0FA0=4000即地址44001);数据长度高位:00;数据长度低位:28;(0028=40即40个地址);CRC效验码:46,E2数据应答格式:从站地址:01;读命令反馈:03;数据长度:50;第一个地址:69;C0;48;A9;第二个地址:C5;00;48;A2;以下类推,直到最后两位CRC:E8;86第一个地址:69;C0;48;A9是如何换算为346958的呢?流量计发送的是IEEE标准的32位浮点数首先要把69;C0;48;A9进行高低16位交换变成:48;A9;69;C0变为32位二进制数:01001000 10101001 01101001 11000000其中最高位为0,代表是正数接下来的八位:10010001变成十进制是145,根据IEEE规范应减去127得18,这是小数点右移的位数;剩下的23位是纯二进制小数即:0.0101001 01101001 11000000加1后得1.0101001 01101001 11000000小数点右移18位后得10101001 01101001 110.00000变为十进制得346958其它地址的32位浮点数计算方法同上标题:《IEEE754 学习总结》发信人:Vegeta时间:2004-11-11,10:32详细信息:一:前言二:预备知识三:将浮点格式转换成十进制数四:将十进制数转换成浮点格式(real*4)附:IEEE754 Converte 1.0介绍一:前言前不久在分析一个程序的过程中遇到了浮点运算,也就顺便学习了一下浮点数的存放格式(IEEE754标准),此文仅作为总结,其中举了几个典型的例子,如果你想深入了解IEEE754标准,我想本文并不太适合您。
ieee标准的32位浮点数转换为十进制 c语言IEEE标准的32位浮点数转换为十进制C语言1. 概述IEEE标准的32位浮点数,也称为单精度浮点数,是一种在计算机中用于存储和处理小数的数据类型。
它采用了IEEE 754标准,使用1个符号位、8个指数位和23个尾数位来表示实数。
在C语言中,我们经常需要将这种二进制表示的浮点数转换为十进制,以便进行数值计算或输出。
2. IEEE标准的32位浮点数表示在C语言中,我们可以用以下结构体来表示IEEE标准的32位浮点数:```ctypedef struct {unsigned int mantissa : 23;unsigned int exponent : 8;unsigned int sign : 1;} ieee_float;```其中,mantissa表示尾数部分,exponent表示指数部分,sign表示符号位。
在进行转换之前,我们需要将这些位按照IEEE标准的规则重新组合成一个32位的二进制数,然后将其转换为十进制表示。
3. 转换算法在C语言中,我们可以编写一个函数来实现将32位浮点数转换为十进制的功能。
下面是一个简单的实现:```c#include <stdio.h>float ieee_float_to_decimal(ieee_float f) {int sign = f.sign == 1 ? -1 : 1;int exponent = f.exponent - 127;float mantissa = 1;for (int i = 0; i < 23; i++) {if (f.mantissa >> (22 - i) & 1) {mantissa += 1.0 / (1 << (i + 1));}}return sign * mantissa * pow(2, exponent);}int main() {ieee_float f = {0x41973333};// 此处的 0x41973333 是一个例子,代表一个32位浮点数的二进制表示float decimal = ieee_float_to_decimal(f);printf("%f\n", decimal);return 0;}```4. 总结和回顾通过以上的转换算法,我们可以将IEEE标准的32位浮点数转换为十进制表示。
1 32位IEE754浮点格式对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;2、第30~23 bit为幂数,其读数值用e表示;3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;十进制转浮点数的计算方法:则按照规定,十进制的值用浮点数表示为:如果十进制为正,则s = 0,否则s = 1;将十进制数表示成二进制,然后将小数点向左移动,直到这个数变为1.x的形式即尾数,移动的个数即为指数。
为了保证指数为正,将移动的个数都加上127,由于尾数的整数位始终为1,故舍去不做记忆。
对3.141592654来说, 1、正数,s = 0;2、3.141592654的二进制形式为正数部分计算方法是除以二取整,即得11,小数部分的计算方法是乘以二取其整数,得0.0010 0100 0011 1111 0110 1010 1000,那么它的二进制数表示为11.0010 0100 0011 1111 0110 1010 1;3、将小数点向左移一位,那么它就变为1.1001 0010 0001 1111 1011 0101 01,所以指数为1+127=128,e = 128 = 1000 0000;4、舍掉尾数的整数部分1,尾数写成0.1001 0010 0001 1111 1011 0101 01,x = 921FB65、最后它的浮点是表示为0 1000 0000 1001 0010 0001 1111 1011 0101 = 40490FDA//--------------------------------------------// 十进制转换为32位IEE754浮点格式 //--------------------------------------------void ConvertDexToIEE754(float fpointer,ModRegisterTpyedef *SpModRegister) {double integer,decimal;unsigned long bininteger,bindecimal; Uint8 _power,i;decimal = modf(fpointer,&integer); if(decimal || integer) {bindecimal = decimal * 0x800000; //2^23 while((bindecimal & 0xff800000) > 0) bindecimal >>= 1; if(integer > 0) {bininteger = integer;for(i=0;i<32;i++) //计算整数部分的2的幂指数{if(bininteger&0x1) _power = i; bininteger >>= 0x1; }bininteger = integer;bininteger &= ~(0x1 << _power); //去掉最高位的1if(_power >= 23) //如果幂指数>23 则舍弃小数位部分 {bininteger >>= (_power-23); bindecimal = 127+_power; bininteger |= bindecimal << 23; } else {bininteger <<= (23 - _power); bindecimal >>= _power; bininteger |= bi ndecimal; bindecimal = 127+_power; bininteger |= bindecimal << 23; } }else if(integer == 0) {bindecimal <<= 9; _power = 0;bininteger = bindecimal;while(bininteger == ((bindecimal<<1)>>1)) {_power++;bindecimal <<= 0x1; bininteger = bindecimal; }_power++;bindecimal <<= 0x1; bindecimal >>= 9;bininteger = bindecimal; bindecimal = 127-_power;bininteger |= bindecimal << 23; } i = 0;SpModRegister->RegByte[i++] = (bininteger >> 24) & 0xff; SpModRegister->RegByte[i++] = (bi ninteger >> 16) & 0xff; SpModRegister->RegByte[i++] = (bininteger >> 8 ) & 0xff;SpModRegister->RegByte[i++] = bininteger & 0xff; } }浮点数转十进制的计算方法:则按照规定,浮点数的值用十进制表示为:= (-1)^s * (1 + x) * 2^(e – 127) 对于49E48E68来说,1、其第31 bit为0,即s = 02、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。
c语言32位浮点数转换十进制公式下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!C 语言 32 位浮点数转换为十进制公式及示例1. 简介在计算机科学中,浮点数是一种用于表示实数的近似值的数据类型。
流量计计算机通过485端口以MODBUS协议把内部IEEE32位浮点数传送到DCS的数据经过研究试验,其数据格式如下数据请求依次为:十六进制从站地址:01;读命令:03;数据起始高位地址:0F;数据起始低位地址:A0;(0FA0=4000即地址44001);数据长度高位:00;数据长度低位:28;(0028=40即40个地址);CRC效验码:46,E2数据应答格式:从站地址:01;读命令反馈:03;数据长度:50;第一个地址:69;C0;48;A9;第二个地址:C5;00;48;A2;以下类推,直到最后两位CRC:E8;86第一个地址:69;C0;48;A9是如何换算为346958的呢?流量计发送的是IEEE标准的32位浮点数首先要把69;C0;48;A9进行高低16位交换变成:48;A9;69;C0变为32位二进制数:01001000 10101001 01101001 11000000其中最高位为0,代表是正数接下来的八位:10010001变成十进制是145,根据IEEE规范应减去127得18,这是小数点右移的位数;剩下的23位是纯二进制小数即:0.0101001 01101001 11000000加1后得1.0101001 01101001 11000000小数点右移18位后得10101001 01101001 110.00000变为十进制得346958其它地址的32位浮点数计算方法同上标题:《IEEE754 学习总结》发信人:Vegeta时间:2004-11-11,10:32详细信息:一:前言二:预备知识三:将浮点格式转换成十进制数四:将十进制数转换成浮点格式(real*4)附:IEEE754 Converte 1.0介绍一:前言前不久在分析一个程序的过程中遇到了浮点运算,也就顺便学习了一下浮点数的存放格式(IEEE754标准),此文仅作为总结,其中举了几个典型的例子,如果你想深入了解IEEE754标准,我想本文并不太适合您。
IEE75432位转换成浮点数十进制1. 引言IEE754是一个定义了浮点数表示方法的标准,它规定了不同精度的浮点数的表示方式,包括单精度浮点数(32位)和双精度浮点数(64位)。
在计算机科学和工程中,我们经常会遇到需要将32位的IEE754表示的浮点数转换成十进制数的情况。
本文将深入探讨IEE75432位转换成浮点数十进制的方法和原理。
2. IEE75432位表示形式在IEE754标准中,单精度浮点数采用32位表示,其中包括1位符号位(s)、8位指数位(e)和23位尾数位(m)。
以一个32位的无符号整数来表示一个单精度浮点数,其转换规则如下:- 符号位:第一位表示符号,0代表正数,1代表负数。
- 指数位:接下来的8位表示指数,需要减去127得到真正的指数值。
- 尾数位:剩下的23位表示尾数,加上1得到尾数的真实值。
3. 转换原理要将IEE75432位表示的浮点数转换成十进制数,首先需要确定符号、指数和尾数的值。
然后根据这些值,利用指数的偏移和尾数的加权,计算出十进制数的值。
4. 转换步骤(1)确定符号位、指数位和尾数位的值。
(2)根据指数位的偏移值计算出真实的指数值。
(3)根据尾数位的加权值计算出真实的尾数值。
(4)根据符号位确定最终的十进制数的符号。
(5)利用指数值和尾数值计算出十进制数的值。
5. 举例以IEE754标准表示的32位浮点数01000001101000000000000000000000为例,其符号位为0,指数位为10000011,尾数位为01000000000000000000000。
根据上述转换步骤,计算出其十进制值为-21.0。
6. 总结IEE75432位转换成浮点数十进制是一个涉及到符号、指数和尾数的复杂计算过程。
通过本文的深入探讨,希望读者能对这一过程有更深刻的理解。
在实际应用中,需要根据具体的转换规则和计算方法,准确地将IEE75432位表示的浮点数转换成十进制数。
32位浮点数最大数的二进制表示32位浮点数最大数的二进制表示是1 11111110 11111111111111111111111,32位浮点数由三部分组成:符号位、指数位和尾数位。
符号位用来表示数的正负,0表示正数,1表示负数;指数位用来表示数的指数部分;尾数位用来表示数的尾数部分。
在32位浮点数中,符号位占1位,指数位占8位,尾数位占23位。
所以32位浮点数的最大值是由指数位和尾数位决定的。
32位浮点数的指数位的最大值是11111110,而尾数位的最大值是11111111111111111111111。
将这两部分拼接在一起,就得到了32位浮点数最大值的二进制表示。
首先,我们来看符号位。
由于这是32位浮点数的最大值,所以符号位为0,表示正数。
接着,我们来看指数位和尾数位。
指数位的最大值是11111110,转换成十进制是254。
但是由于浮点数的指数部分有一个偏移量,因此实际的指数部分是254-127=127。
尾数位的最大值是11111111111111111111111,转换成十进制是8388607。
将符号位、指数部分和尾数部分拼接在一起,就得到了32位浮点数最大值的二进制表示:1 11111110 11111111111111111111111。
换算成十进制,这个二进制数表示的值是(1*2^127)*(1+8388607/(2^23)) = 3.4028235*10^38。
这说明32位浮点数的最大值是3.4028235*10^38。
从上面的计算可以看出,32位浮点数最大值的二进制表示是1 11111110 11111111111111111111111,对应的十进制表示是3.4028235*10^38。
这个数值是非常大的,超过了我们通常使用的范围。
因此,在实际编程中,如果需要表示更大的数值,需要使用64位或以上的浮点数类型来进行存储和计算。
总之,32位浮点数最大值的二进制表示是1 11111110 11111111111111111111111,对应的十进制表示是3.4028235*10^38。
ieee754 32位单精度浮点数转换十进制IEEE 754是一种用来表示浮点数的二进制标准,它规定了浮点数的表示方法、精度和范围。
其中,32位单精度浮点数是一种常用的表示方法,它包括了1位符号位、8位指数位和23位尾数位。
下面我们将详细介绍32位单精度浮点数的转换方法和相关知识。
首先,我们来看一下32位单精度浮点数的结构。
它的具体结构如下所示:1位符号位:用来表示数的符号,0表示正数,1表示负数。
8位指数位:用来表示数的阶码,采用偏置表示法,将真实的指数值加上一个偏置值(127),得到8位的指数值。
23位尾数位:用来表示数的尾数,也称为有效数字。
当给定一个32位单精度浮点数时,我们需要按照上述的结构进行解析,得到相应的数值。
下面我们以一个例子来说明。
假设给定的32位单精度浮点数为0 10000001 10000000000000000000000,我们需要通过如下步骤将其转换为十进制表示。
首先确定符号位,0表示正数。
然后确定指数位,以偏置表示法为例,我们先将真实的指数值减去偏置值(127),得到真实的指数值为1。
再确定尾数位,转换为10进制为1*2^(-1),为0.5。
最后我们将符号位、指数位和尾数位结合起来,得到的十进制表示为0.5。
通过上述例子,我们可以看到32位单精度浮点数转换为十进制的过程,其实质上就是将其分解为符号位、指数位和尾数位,然后根据IEEE 754标准和偏置表示法进行相应的计算,得到最终的十进制表示。
除此之外,32位单精度浮点数还可以表示很广泛的数字范围,从大到小可以表示的数值范围约为±3.4*10^38-±1.2*10^-38。
而且其精度在绝大多数情况下也是足够的。
这使得32位单精度浮点数在计算机程序中被广泛使用,特别是在对运算速度和内存占用有严格要求的程序中。
在实际应用中,要注意32位单精度浮点数也存在精度损失的问题。
由于尾数只能用有限的二进制位数来表示,它有时不能精确表示某些十进制数,特别是在进行复杂运算时,可能会出现由于进位或者舍入的误差。
float转十进制浮点数是计算机科学中常用的数据类型之一,用于表示实数。
在计算机内部,浮点数采用二进制的形式进行存储和运算。
然而,当我们需要将浮点数转换为十进制数时,就需要进行一定的计算和处理。
我们需要了解浮点数的表示形式。
浮点数由两个部分组成:尾数和指数。
尾数表示实数的有效位数,指数则表示小数点的位置。
这种表示方式使得浮点数可以表示非常大或非常小的数值范围,但也会引入一定的误差。
要将浮点数转换为十进制数,我们可以按照以下步骤进行:1. 确定浮点数的符号(正负)。
浮点数的第一位表示符号,0表示正数,1表示负数。
2. 计算尾数。
尾数的计算需要根据浮点数的位数和指数范围进行,具体的计算方法可以参考IEEE 754标准。
3. 计算指数。
指数表示小数点的位置,一般采用偏移的形式进行表示。
需要注意的是,指数可能是正数、负数或零。
4. 根据尾数和指数计算出实际的十进制数值。
具体的计算方法是将尾数乘以2的指数次幂。
需要注意的是,浮点数的转换过程中可能会引入一定的误差。
这是由于浮点数的表示形式和十进制数的表示形式之间存在差异导致的。
在进行浮点数转换时,我们需要注意这一点,并尽可能避免在计算过程中引入更多的误差。
浮点数转换为十进制数在计算机科学中有着广泛的应用。
例如,在科学计算、金融领域和图像处理中,我们经常需要对浮点数进行精确的计算和处理。
通过将浮点数转换为十进制数,我们可以更方便地进行数值计算和比较,从而得到更准确的结果。
总结起来,浮点数转换为十进制数是一种常见的计算机操作,通过对浮点数的符号、尾数和指数进行计算和处理,我们可以得到对应的十进制数值。
在进行转换时,我们需要注意浮点数的误差问题,并尽可能避免引入更多的误差。
浮点数转换为十进制数在计算机科学中有着广泛的应用,可以帮助我们进行精确的数值计算和比较。
32位浮点数转化为10进制工具32位浮点数转化为十进制工具概述:在计算机科学领域中,我们经常会使用浮点数来表示实数,其中32位浮点数是一种常见的格式。
然而,对于非技术人员来说,理解和使用32位浮点数可能是一项挑战。
为了帮助大家更好地理解和转化32位浮点数为十进制数,本文将介绍一个工具,它可以方便地将32位浮点数转化为十进制数。
工具介绍:该工具是一个简单而实用的在线转换工具,它可以将32位浮点数转化为十进制数。
使用该工具,用户只需输入32位浮点数的二进制表示,点击“转换”按钮,即可得到对应的十进制数。
该工具的界面简洁明了,操作简单方便,适用于各种用户,无论是计算机专业人员还是普通用户都可以轻松使用。
工具特点:1. 高精度转换:该工具使用了高精度计算算法,确保转换结果的准确性。
它能够处理各种精度的浮点数,包括小数点前后的位数。
2. 快速转换:转换过程非常迅速,即使是较长的32位浮点数,也能在短时间内完成转换。
3. 可定制化选项:用户可以根据自己的需求选择转换结果的显示格式,如科学计数法、小数或分数形式等。
4. 多平台支持:该工具可以在各种操作系统和设备上使用,包括Windows、Mac、Linux以及手机和平板电脑等。
使用步骤:1. 打开32位浮点数转化为十进制的工具网页。
2. 在输入框中输入32位浮点数的二进制表示。
3. 点击“转换”按钮,等待几秒钟,即可得到转换结果。
4. 根据需要,选择合适的显示格式,如科学计数法或小数形式。
5. 复制或保存转换结果,以便后续使用。
实例演示:为了更好地理解和使用该工具,下面给出一个实例演示。
假设我们要将32位浮点数0 10000001 01000000000000000000000转化为十进制数。
按照上述步骤,我们将输入该二进制数并点击“转换”按钮。
经过计算,我们得到的十进制数为 5.0。
这样,我们就成功地将32位浮点数转化为了十进制数。
应用场景:该工具在实际应用中有着广泛的用途。
流量计计算机通过485端口以MODBUS协议把内部IEEE32位浮点数传送到DCS的数据经过研究试验,其数据格式如下数据请求依次为:十六进制从站地址:01;读命令:03;数据起始高位地址:0F;数据起始低位地址:A0;(0FA0=4000即地址44001);数据长度高位:00;数据长度低位:28;(0028=40即40个地址);CRC效验码:46,E2数据应答格式:从站地址:01;读命令反馈:03;数据长度:50;第一个地址:69;C0;48;A9;第二个地址:C5;00;48;A2;以下类推,直到最后两位CRC:E8;86第一个地址:69;C0;48;A9是如何换算为346958的呢?流量计发送的是IEEE标准的32位浮点数首先要把69;C0;48;A9进行高低16位交换变成:48;A9;69;C0变为32位二进制数:01001000 10101001 01101001 11000000其中最高位为0,代表是正数接下来的八位:10010001变成十进制是145,根据IEEE规范应减去127得18,这是小数点右移的位数;剩下的23位是纯二进制小数即:0.0101001 01101001 11000000加1后得1.0101001 01101001 11000000小数点右移18位后得10101001 01101001 110.00000变为十进制得346958其它地址的32位浮点数计算方法同上标题:《IEEE754 学习总结》发信人:Vegeta时间:2004-11-11,10:32详细信息:一:前言二:预备知识三:将浮点格式转换成十进制数四:将十进制数转换成浮点格式(real*4)附:IEEE754 Converte 1.0介绍一:前言前不久在分析一个程序的过程中遇到了浮点运算,也就顺便学习了一下浮点数的存放格式(IEEE754标准),此文仅作为总结,其中举了几个典型的例子,如果你想深入了解IEEE754标准,我想本文并不太适合您。
二:预备知识-----------------------------------------------------------------------值存储为指数偏移量real*4 1位符号位(s)、8位指数(e),23位尾数(m,共32位) 127(7FH)real*8 1位符号位(s)、11位指数(e),52位尾数(m,共64位) 1023(3FFH)real*10 1位符号位(s)、15位指数(e),64位尾数(m,共80位) 16383(3FFFH)-----------------------------------------------------------------------计算公式:V=(-1)^s*2^E*M当e(各位)为全'0'时,E=1-(2^(e(位数)-1)-1),;M=m。
如:real*4是8位,E=1-(2^(8-1)-1)=1-127=-126即,在real*4时:V=(-1)^s*2^(-126)*m在real*8时:V=(-1)^s*2^(-1022)*m当e(各位)不为全'0'且不为全'1'时,E=e(值)-(2^(e(位数)-1)-1);M=1+m。
即,在real*4时:V=(-1)^s*2^(e(值)-127)*(1+m)在real*8时:V=(-1)^s*2^(e(值)-1023)*(1+m)三:将浮点格式转换成十进制数[例3.1]:0x00280000(real*4)转换成二进制00000000001010000000000000000000符号位指数部分(8位)尾数部分0 00000000 01010000000000000000000符号位=0;因指数部分=0,则:尾数部分M为m:0.01010000000000000000000=0.3125该浮点数的十进制为:(-1)^0*2^(-126)*0.3125=3.6734198463196484624023016788195e-39[例3.2]:0xC04E000000000000(real*8)转换成二进制1100000001001110000000000000000000000000000000000000000000000000符号位指数部分(11位)尾数部分1 10000000100 1110000000000000000000000000000000000000000000000000符号位=1;指数=1028,因指数部分不为全'0'且不为全'1',则:尾数部分M为1+m:1.1110000000000000000000000000000000000000000000000000=1.875该浮点数的十进制为:(-1)^1*2^(1028-1023)*1.875=-60四:将十进制数转换成浮点格式(real*4)[例4.1]:26.0十进制26.0转换成二进制11010.0规格化二进制数1.10100*2^4计算指数4+127=131符号位指数部分尾数部分0 10000011 10100000000000000000000以单精度(real*4)浮点格式存储该数0100 0001 1101 0000 0000 0000 0000 00000x41D0 0000[例4.2]:0.75十进制0.75转换成二进制0.11规格化二进制数1.1*2^-1计算指数-1+127=126符号位指数部分尾数部分0 01111110 10000000000000000000000以单精度(real*4)浮点格式存储该数0011 1111 0100 0000 0000 0000 0000 0000 0x3F40 0000[例4.3]:-2.5十进制-2.5转换成二进制-10.1规格化二进制数-1.01*2^1计算指数1+127=128符号位指数部分尾数部分1 10000000 01000000000000000000000以单精度(real*4)浮点格式存储该数1100 0000 0010 0000 0000 0000 0000 0000 0xC020 0000附:IEEE754 Converte 1.0介绍用IEEE754 Converte 1.0 转换[例3.2]的截图IEEE754 Converter 目前可以对以下数据进行相互转换:┌────────────────────────┐│real*4(HEX)<--->floating point numbers(DEC) ││││real*8(HEX)<--->floating point numbers(DEC) │└────────────────────────┘现举例说明其使用方法:在Softice中用D命令查看内存地址:0050C510,可得:0030:0050C510 00 00 00 00 00 00 4E 40-00 00 00 00 00 00 20 40 ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^并已知数据为REAL*8。
为了方便使用,在[Input]中只需输入:4E40 ,而不用转换成404E。
单击REAL*8中的[HEX--->F-P]按键即可在[Output]中得到结果:60 。
反之亦然:在[Input]中输入:60,按[F-P--->HEX]得:4E40。
补码补码举例1、在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。
另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
2、补码与原码的转换过程几乎是相同的。
数值的补码表示也分两种情况:(1)正数的补码:与原码相同。
例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。
在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。
我在这里稍微介绍一下“模”的概念:“模”是指一个计量系统的计数范围。
如时钟等。
计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。
例如:时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。
任何有模的计量器,均可化减法为加法运算。
例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6另一种是顺拨8小时:10+8=12+6=6在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。
对“模”而言,8和4互为补数。
实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。
共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。
n位计算机,设n=8,所能表示的最大数是11111111,若再加1称为100000000(9位),但因只有8位,最高位1自然丢失。
又回了00000000,所以8位二进制系统的模为2^8。
在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。
把补数用到计算机对数的处理上,就是补码。
另外两个概念一的补码(one's complement) 指的是正数=原码,负数=反码而二的补码(two's complement) 指的就是通常所指的补码。
这里补充补码的代数加减运算:1、补码加法[X+Y]补= [X]补+ [Y]补【例7】X=+0110011,Y=-0101001,求[X+Y]补[X]补=00110011 [Y]补=11010111[X+Y]补= [X]补+ [Y]补= 00110011+11010111=00001010注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是100001010,而是00001010。