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

//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") ;

}

 

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在计算机中,数值表示通常使用二进制,而为了进行运算和存储,我们需要不同的数制表示形式:原码反码补码。这些方法主要应用于有符号整数,特别是对于负数的表示。 **1. 原码(Unsigned):** - 对于正数,原码就是它的二进制表示。 - 对于负数,原码是在最高位(符号位)为1的情况下,剩下的数不变。 例如,十进制数-5的原码二进制中是 `10000101`。因为最高位是1,表示负数。 **2. 反码(One's Complement):** - 正数的反码是其对应原码。 - 负数的反码是其原码逐位取反(包括符号位),然后加1。 例如,-5的反码是 `11111010`,因为原码是 `10000101`,取反后得到 `01111011`,加1得 `11111010`。 **3. 补码(Two's Complement):** - 补码是计算机中最常用的表示负数的方法。 - 正数的补码等于其原码。 - 负数的补码是其反码加1。 同样,-5的补码是 `11111010`,因为反码 `11111010` 加1等于 `11111011`。 以下是简单的Python代码示例,用于将十进制数转换为这三种表示: ```python def convert_to_binary(num, mode='decimal'): if mode == 'decimal': return format(int(num), '08b') elif mode == 'unsigned': return bin(num)[2:] elif mode == 'ones_complement': return format(~int(num), '08b') elif mode == 'two_complement': return format(int(num) & ~1, '08b') # 使用补码规则 # 示例 decimal_num = 5 print("十进制:", convert_to_binary(decimal_num)) print("原码:", convert_to_binary(decimal_num, 'unsigned')) print("反码:", convert_to_binary(decimal_num, 'ones_complement')) print("补码:", convert_to_binary(decimal_num, 'two_complement')) ``` 如果你对这些概念或代码有任何疑问,请告诉我,我会进一步解释或者提供相关的问题供你深入学习。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值