带有小数点的二进制的补码如何计算?

带有小数点的二进制的补码如何计算?,第1张

小数的原码和补码应该先将其转换成二进制小数,采用"乘2取整,顺序排列"法,直到积中的小数部分为零,或者达到所要求的精度为止,然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数

1、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。

2、负整数的符号位固定为1,由原码变为补码时,规则如下:原码符号位1不变,整数的每一位二进制数位求反,得到反码;反码符号位1不变,反码数值位最低位加1,得到补码。

3、例如正整数的原码为01110110,则反码和补码也为01110110;负整数的原码为11110110,反码为10001001,补码为11110111。

1、反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。在计算机内,定点数有3种表示法:原码、反码和补码。

2、在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

小数部分这么算,举例来说:
0375
将小数部分乘以2得到075,这个结果的整数部分就是转换后的第1位二进制小数[00]
用上步的小数部分继续算:0752=15,现在将整数部分填入二进制小数[001]
052=10,二进制小数为[0011],发现小数部分是0时停止运算,否则可以继续算下去
提示:如果转n进制就乘以n好了,还是保留整数部分,用小数一位一位地算直到小数为0
帮助理解:0375是十进制小数,那么小数点后边第一位就是037510=375的整数部分对吧,继续用小数算,每位都可以出现在整数部分的。

c语言中查看小数长度的方法代码如下:
1)如果按%s输入,也就是按字符串格式输入,先找到小数点的位置,然后统计下小数点后数字的长度。
具体实现可参考:
#include
#include
#include
intmain(intargc,charargv[])
{
chara[128];
while(scanf("%s",a)!=EOF)
{
if(strstr(a,"")!=NULL)
printf("%d\n",strlen(strstr(a,"")+1));
else
printf("0\n");
}
system("pause");
return0;
}
2)如果按%f(对应float类型小数)或者%lf(double类型的小数)方式读入,则需要先去掉整数部分,然后看小数部分一直乘10减去整数部分,知道等于0,统计,乘了几次10,但是由于浮点数在计算机中存的并不是准确值,这个往往得不到正确的结果。可以使用sprintf(str,"%g",f);,然后由于f毕竟不是准确值,还是会出现有些问题,源码如下:
#include
#include
#include
intmain(intargc,charargv[])
{
chara[128];
floatf;
while(scanf("%f",&f)!=EOF)
{
sprintf(a,"%g",f);
if(strstr(a,"")!=NULL)
printf("%d\n",strlen(strstr(a,"")+1));
else
printf("0\n");
}
system("pause");
return0;
}
%在c语言中有两种释义,一是求余符号,经常会用到判断一个数是不是能被另一个整除。二是引导符,用于引导输入输出项表列的格式。
在scanf、printf这样的函数中,将参数类型与输入/输出句子中的相应位置相对应所使用的转义标志符。%c单个字符输出的意思;%s是输出字符串;%d是输出整型;%f是输出整型。其中常用的有%c--对应字符型char%s--对应字符串型char(char[])%d--对应整形int%ld--对应长整形long%x--对应十六进制整数,大于9的字母小写%X--对应十六进制整数,大于9的字母大写%u--对应无符号整形unsignedint。

原码:在数值前直接加一符号位的表示法。

例如: 符号位=数值位

[+7]原=0 0000111 B

[-7]原=1 0000111 B

注意:a 数0的原码有两种形式:

[+0]原=00000000B [-0]原=10000000B

b 8位二进制原码的表示范围:-127~+127

编码方式

原码是有符号数的最简单的编码方式,便于输入输出,但作为代码加减运算时较为复杂。

一个字长为n的机器数能表示不同的数字的个数是固定的2^n个,n=8时2^n=256;用来表示有符号数,数的范围就是 -2^(n-1)-1 ~ 2^(n-1)-1,n=8时,这个范围就是 -127 ~ +127。

但是在不需要考虑数的正负时,就不需要用一位来表示符号位,n位机器数全部用来表示是数值,这时表示数的范围就是0~2^n-1,n=8时这个范围就是0~255。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13352252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-20
下一篇 2023-07-20

发表评论

登录后才能评论

评论列表(0条)

保存