//Function.h
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
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") ;
}