通过C语言实现小数整数求原码,反码,补码 您所在的位置:网站首页 求一个数的反函数怎么求 通过C语言实现小数整数求原码,反码,补码

通过C语言实现小数整数求原码,反码,补码

2024-06-03 22:10| 来源: 网络整理| 查看: 265

通过C语言实现小数、整数求原码、反码、补码 判断输入的值是整数还是小数,是正是负求纯整数不含符号的原码求纯小数不含符号的原码完善整个原码(符号、小数、整数合在一起)将求原码的函数封装在一个函数里求反码的函数求补码的函数main函数整个实现代码测试数据结果

判断输入的值是整数还是小数,是正是负

j、k都是用来标记的

void judge(double x){ double i=x; //判断是正是负 if(i //printf("纯整数\n"); k=1; } else if(n==0&&l>0){ //printf("纯小数\n"); k=-1; } else { //printf("请输入纯小数或者纯整数\n"); k=0; } } 求纯整数不含符号的原码

这里采用了递归的方法求整数原码,函数名起的有点草率 a数组是用来存储整数原码的数组

void digui(int i){ if(i==0){ return; } else { digui(i/2); a[s++]=i%2; return; } } 求纯小数不含符号的原码

方法主要是while中的方法,b数组是用来存储小数原码的数组,

void digui1(double i){ int ss=0; double x=i; while(x!=0){ x=x*2; if(x>1){ x=x-(int)x; b[ss++]=1; } else if(x int i1=i; if(i printf("0,"); c[0]='0'; c[1]=','; } cc=2; for (int m=0;m printf("1."); c[0]='1'; c[1]='.'; } else{ printf("0."); c[0]='0'; c[1]='.'; } cc=2; //printf("i2的值:%lf\n",i2); digui1(i2); printf("\n"); } else if(k==0){ int i3=i; double i4=i-i3; if(i3 printf("1,"); c[0]='1'; c[1]=','; } else{ printf("0,"); c[0]='0'; c[1]=','; } cc=2;s=0; digui(i3); for(int l=0;l c[cc++]=a[l]+'0'; } c[cc++]='.'; printf("."); digui1(i4); printf("\n"); } } 将求原码的函数封装在一个函数里 void Binary_source(double n){ judge(n); Original(n); } 求反码的函数 void Fbinary_source(char a[]){ if(c[0]=='0'){ for(int m=0;m for(int m=2;m printf("%c",c[m]); } }printf("\n"); } 求补码的函数

负数的补码=反码+1 实现满2进1,直接从末尾开始找1,遇见1就变0,遇到0就变1 再跳出循环。

void Complement_number(char a[]){ if(c[0]=='0'){ for(int m=0;m for(int m=cc-1;m>2;m--){ if(c[m]=='1') c[m]='0'; else if(c[m]=='0') { c[m]='1'; break; } } for(int m=0;m while(true){ double n; printf("请输入十进制真值:"); scanf("%lf",&n); if(n==0){ printf("+0:\n"); printf("原码:00000000\n反码:00000000\n补码:00000000\n"); printf("-0:\n"); printf("原码:10000000\n反码:11111111\n补码:00000000\n"); continue; } printf("原码:"); Binary_source(n); printf("C[]中的值:"); c[cc]='\0'; // for(int i=0;i j=1; i=-i; } else j=0; //判断是纯小数还是纯整数 int n=i/1; double l=i-n; if(n>=1&&l==0){ //printf("纯整数\n"); k=1; } else if(n==0&&l>0){ //printf("纯小数\n"); k=-1; } else { //printf("请输入纯小数或者纯整数\n"); k=0; } } //递归求纯整数不含符号的二进制原码 void digui(int i){ if(i==0){ return; } else { digui(i/2); a[s++]=i%2; return; } } //求纯小数不含符号的二进制原码 void digui1(double i){ int ss=0; double x=i; while(x!=0){ x=x*2; if(x>1){ x=x-(int)x; b[ss++]=1; } else if(x if(k==1){ int i1=i; if(i printf("0,"); c[0]='0'; c[1]=','; } cc=2; for (int m=0;m printf("1."); c[0]='1'; c[1]='.'; } else{ printf("0."); c[0]='0'; c[1]='.'; } cc=2; //printf("i2的值:%lf\n",i2); digui1(i2); printf("\n"); } else if(k==0){ int i3=i; double i4=i-i3; if(i3 printf("1,"); c[0]='1'; c[1]=','; } else{ printf("0,"); c[0]='0'; c[1]=','; } cc=2;s=0; digui(i3); for(int l=0;l c[cc++]=a[l]+'0'; } c[cc++]='.'; printf("."); digui1(i4); printf("\n"); } } void Binary_source(double n){ judge(n); Original(n); } void Fbinary_source(char a[]){ if(c[0]=='0'){ for(int m=0;m for(int m=2;m printf("%c",c[m]); } }printf("\n"); } void Complement_number(char a[]){ if(c[0]=='0'){ for(int m=0;m for(int m=cc-1;m>2;m--){ if(c[m]=='1') c[m]='0'; else if(c[m]=='0') { c[m]='1'; break; } } for(int m=0;m while(true){ double n; printf("请输入十进制真值:"); scanf("%lf",&n); if(n==0){ printf("+0:\n"); printf("原码:00000000\n反码:00000000\n补码:00000000\n"); printf("-0:\n"); printf("原码:10000000\n反码:11111111\n补码:00000000\n"); continue; } printf("原码:"); Binary_source(n); printf("反码:"); Fbinary_source(c); printf("补码:"); Complement_number(c); } } 测试数据结果

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有