输入一个十进制整数,输出其二进制原码、反码及补码

//Function.h

 

#include

#include

#include

 

void compute (int n , char *str_y , char *str_f , char *str_b)

{

int i = 0 ;

int j = 0 ;

int temp = 0 ;

int len = 0 ;

char str_yuan_1 [20] ;

char str_yuan_2 [20] ;

char str_fan[20] ;

char str_bu[20] ;

char toChar = '1' - 1 ;

 

if(n > 0) temp = n ;

else temp = - n ;

 

/////求原码.....

while(temp != 0)   ///求原码的倒置 8

{

str_yuan_1[i] = (temp % 2) + toChar ;

temp /= 2 ;

i ++ ;

}

str_yuan_1[i] = '/0' ;

len = strlen(str_yuan_1) ;

 

for(i = len ; i > 0 ; i --)///求出原码

{

str_yuan_2[i] = str_yuan_1[len - i] ;

}

str_yuan_2[len + 1] = '/0' ;

if(n >= 0)

str_yuan_2[0] = '0' ;

else str_yuan_2[0] = '1' ;

strcpy(str_y , str_yuan_2) ;

 

///求反码。。。。

if(n >= 0)

strcpy(str_fan , str_yuan_2) ;

else 

{

len = strlen(str_yuan_2) ;

str_fan [0] = '1' ;

for(i = 1 ; i < len ; i ++)

if(str_yuan_2[i] == '1')

str_fan[i] = '0' ;

else str_fan[i] = '1' ;

str_fan[i] = '/0' ;

}

strcpy(str_f , str_fan) ;

 

///求补码。。。。

if(n >= 0)

strcpy(str_bu , str_yuan_2) ;

else 

{

len = strlen(str_fan) ;

str_bu[0] = '1' ;

temp = 0 ;

j = 1 ;////确保第一次加1,其它都加0

for(i = len - 1 ; i >= 0 ; i --)

{

if(str_fan[i] + j + temp  == '2')

{

str_bu[i] = '0' ;

temp = 1 ;

j = 0 ;

}

else if(str_fan[i] + j + temp  == '3')

{

str_bu[i] = '1' ;

temp = 1 ;

j = 1 ;

}

else if(str_fan[i] + j + temp  == '1')

{

str_bu[i] = '1' ;

temp = 0 ;

j = 0 ;

}

else if(str_fan[i] + j + temp  == '0')

{

str_bu[i] = '0' ;

temp = 0 ;

j = 0 ;

}

}

str_bu[len] = '/0' ;

}

strcpy(str_b , str_bu) ;

}

 

 

//test.c

 

#include "Function.h"

 

int main()

{

int num = 0 ;

char str_yuan[20] ;

char str_fan[20] ;

char str_bu[20] ;

printf("输入一个整数:");

scanf("%d" , &num) ;

compute(num , str_yuan , str_fan , str_bu) ;

printf("%d原码为:%s /n" ,num ,str_yuan) ;  ///输出原码...

printf("%d反码为:%s /n" ,num , str_fan) ; ///输出反码...

printf("%d补码为:%s /n" ,num , str_bu) ;   ///输出补码...

system("pause") ;

}

 

 

你可能感兴趣的:(输入一个十进制整数,输出其二进制原码、反码及补码)