给出一个十进制数,可以是整数,也可以是小数。经过数据处理之后,输出这个数的原码,反码,补码,和移码的表示方法。其中整数部分和小数部分分别用32位机器数表示。再输出这个数的单精度浮点数。

用C实现:给出一个十进制数,可以是整数,也可以是小数。经过数据处理之后,输出这个数的原码,反码,补码,和移码的表示方法。其中整数部分和小数部分分别用32位机器数表示。再输出这个数的单精度浮点数。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-深度学习进阶 2021-10-04 15:56关注
如果有帮助请点一下我回答右上方的采纳,谢谢!以后有什么问题可以互相交流。
#include "stdio.h" #include <stdlib.h> #include <string.h> #define TTWO 32 #define TONE 31 //*x>-2147483648 && x<2147483648; void integertrueform(int x,int map[]) { if(x>=0) map[TONE]=0; if(x<0) {map[TONE]=1; x=-x;} int i=1; while(x&&(i-TTWO)) { map[i-1]=x%2; i++; x=x/2; } } void decimaltrueform(double x,int map[]) { if(x>=0) map[TONE]=0; if(x<0) {map[TONE]=1; x=-x;} int i=TONE; while(x!=0&&i) { x=x*2; if(x>=1) {map[i-1]=1;x--;} else map[i-1]=0; i--; } } void ptrueform(int map[]) { int i=TTWO; while(i) { printf("%d",map[i-1]); i--; } } int onescomplement(int map[]) { int i; if(map[TONE]==0) { return 0; } else { i=TONE; while(i>0) { if(map[i-1]==1) map[i-1]=0; else map[i-1]=1; i--; } } } void ponescomplement(int map[]) { int i=TTWO; while(i>0) { printf("%d",map[i-1]); i--; } } int complemental(int map[]) { if(map[TONE]==0) return 0; else { int i=0; while(map[i]&&i<TTWO) { map[i++]=0; } map[i]=1; } } void pcomplemental(int map[]) { int i=TTWO; while(i>0) { printf("%d",map[i-1]); i--; } } int excess(int map[]) { if(map[TONE]==1) map[31]=0; else map[TONE]=1; } void pexcess(int map[]) { int i=TTWO; while(i>0) { printf("%d",map[i-1]); i--; } } /*void ITEID(int map[]) { int i=TTWO;int j[TTWO]={0};int e[8]={0};int c=22; while(i) { if(map[i--]==1) {break;i--;} } integertrueform(i,e); j[23]=map[TONE]; while(i&&c+1) { j[c--]=map[i--]; } printf("ITEEE754浮点数:0"); int y=31; while(y>24) { printf("%d",e[y--]); } c=23; while(c+1) { printf("%d",j[c--]); } printf("\n"); } /*void ITEI void ITED */ main() { int a[TTWO]={0},z[TTWO]={0}; int ti = 0; double td = 0; double tdf=0; int tdi=0; char str[10]=""; printf("请输入一个十进制数:"); scanf("%s",str); // 先存成字符串 if (NULL == strchr(str, '.')) // 等于NULL是没有找到小数点 { sscanf(str, "%d", &ti); // 再从字符串格式化成整型 printf("输入的是定点整型:%d\n", ti); integertrueform(ti,a); printf("原码:"); ptrueform(a); /* ITEID(a);*/ printf("\n"); onescomplement(a); printf("反码:"); ponescomplement(a); printf("\n"); complemental(a); printf("补码:"); pcomplemental(a); printf("\n"); excess(a); printf("移码:"); pexcess(a); printf("\n"); } else { sscanf(str, "%lf", &td); // 再从字符串格式化成浮点型 printf("输入的是浮点数:%lf\n", td); if(td<1&&td>-1) { decimaltrueform(td,a); printf("定点小数原码:"); ptrueform(a); printf("\n"); onescomplement(a); printf("定点小数反码:"); ponescomplement(a); printf("\n"); complemental(a); printf("定点小数补码:"); pcomplemental(a); printf("\n"); excess(a); printf("定点小数移码:"); pexcess(a); printf("\n"); } if(td>=1||td<=-1) { tdi=(int)td; tdf=td-tdi; integertrueform(tdi,a); decimaltrueform(tdf,z); printf("原码整数部分:"); ptrueform(a); printf(" "); printf("原码小数部分:"); ptrueform(z); printf("\n"); onescomplement(a); printf("反码整数部分:"); ponescomplement(a); printf(" "); onescomplement(z); printf("反码小数部分:"); ponescomplement(z); printf("\n"); complemental(a); printf("补码整数部分:"); pcomplemental(a); printf(" "); complemental(z); printf("补码小数部分:"); pcomplemental(z); printf("\n"); excess(a); printf("移码整数部分:"); pexcess(a); printf(" "); excess(z); printf("移码小数部分:"); pexcess(z); printf("\n"); } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用