|
发表于 2019-9-23 11:18:15
|
显示全部楼层
#include<stdio.h> #include<limits.h> #define T 2 int main() { int a,binary[100],bin_i_c[100],bin_c[100],num;//一般变量 int n,m,i,p;//计数变量 i=0; printf("Please enter a number:"); scanf("%d",&num); a=num; num=Abs(num); //取输入数据的绝对值 printf("%d binary primitive code is ",a); //原码的计算,见下: if(a>=0) binary[0]=0; else binary[0]=1; printf("%d ",binary[0]); do { binary[i+1]=num%T; num=num/T; i++; n=i; m=i; p=i; }while(num>0);//用循环计算数据的二进制原码,并依次放入数组binary中。 for(i--;i>=0;i--) { printf("%d",binary[i+1]);//运用for循环从后往前把数据的二进制原码输出。 } printf("\n");//换行。 //反码计算,见下: if(a>=0)//先判断数据的正负。 { binary[0]=0; printf("%d binary inverse code is same with primitive code",a);//告知用户数据的反码和它的原码一样 } //为负数时计算反码并输出。 else { binary[0]=1; bin_i_c[0]=binary[0]; printf("%d binary inverse code is ",a); printf("%d ",binary[0]); for(n--;n>=0;n--) { bin_i_c[n+1]=1-binary[n+1]; bin_c[n+1]=bin_i_c[n+1]; printf("%d",bin_i_c[n+1]); } } printf("\n");//负数反码是:除表符号项,其余各项0-1互换。 //补码算法 if(a<0) { if(bin_c[i+2]==1) { while(bin_c[i+2]==1) { bin_c[i+2]=0; i++; } bin_c[i+2]=1; } else { bin_c[i+2]=1; } //输出指令 printf("%d binary complement is ",a); printf("%d ",binary[0]); for(p;p>=1;p--) { printf("%d",bin_c[p]);//负数补码,是在反码的最后一位上加一,过一则进一。 } } else { printf("%d binary complement is same as binary primitive code.",a);//告知用户,正数的补码和它的原码,反码一样。 } printf("\n"); printf("%d corresponding octal and hexadecimal number are %#o and %#x\n",a,a,a);//输出十六进制数和八进制数。 return 0; } int Abs(int x)//绝对值运算,取数据绝对值。 { return (x>=0?x:-x); }//自己写的,有啥不对还请指教 |
评分
-
查看全部评分
|