有趣c语言例题之明码

明码
在这里插入图片描述
解题思路:
本题主要用到十进制与二进制的转换
输出时主要是每行输出两个十进制数转为二进制的格式输出
负数转二进制用到补码
首先,来个-5,实践出真知嘛。把5转化为二进制字节形式。得到101,然后补零。这个时候,原码就出来了。然后,取反(0的变成1,1的变成0。)/一个整数按照绝对值大小转换成的二进制数,是为原码。原码就上面的:00000101。/3得到了反码,嗯,反码是和原码反着来的。然后,加一。//反码加一叫补码。步骤阅读4补码就是负数在计算机中的二进制表示方法。那么,11111011表示8位的-5,如果要表示16位的-5 ,在左边添上8个1即可。
#include<stdio.h>

int main(){

     int i,j,k,l,a[32],b[16];

     for(j=0;j<10;j++){

     for(i=0;i<32;i++){

scanf("%d",&a[i]);

     }

              for(i=0;i<32;i=i+2){

              if(a[i]>=0){                //正整数转二进制

                      for(k=7;k>=0;k--){

                               b[k]=a[i]%2;

                               a[i]=a[i]/2;

              }

     }

              if(a[i]<0){          负数转二进制

                               a[i]=-a[i];

                               for(k=7;k>=0;k--){

                               b[k]=1-a[i]%2;          

                               a[i]=a[i]/2;

              }

                      if(b[7]==0){

                      b[7]=b[7]+1;

                      goto A;

              }

                         if(b[7]==1){

                                 for(k=7;k>=0;k--){

                                                                              if(b[k]==0) {

                                                         b[k]=1;

                                                         break;

                                                 }

                                                          if(b[k]==1) b[k]=0;

                                                 }

                                        }

                                        

                                        }

              A:if(a[i+1]>=0){

                      for(k=15;k>=8;k--){

                               b[k]=a[i+1]%2;

                               a[i+1]=a[i+1]/2;

              }

     }

              if(a[i+1]<0){

                      a[i+1]=-a[i+1];

                       for(k=15;k>=8;k--){

                               b[k]=1-a[i+1]%2;

                               a[i+1]=a[i+1]/2;

              }

                               if(b[15]==0){

                               b[15]=b[15]+1;

                               goto B;

                      }

                                         if(b[15]==1){

                                 for(k=15;k>=8;k--){

                                                                              if(b[k]==0){

                                                         b[k]=1;

                                                         break;

                                                 }

                                                           if(b[k]==1) b[k]=0;

                                                 }

                                        }

                                         }

B:for(k=0;k<16;k++){

    printf("%d",b[k]);

                      }

                      printf("\n");

}

     }

     return 0;

}

猜你喜欢

转载自blog.csdn.net/xurQQ/article/details/83747498
今日推荐