C语言求原码的补码问题

C语言求原码的补码问题,第1张

通过补或芦坦型码来求原码?

你以为补码衫信带原码是一一对应的吗?

八位补码,可代表带符号数-128~127。

八位原码,可代表带符号数-127~127。

由此可知,-128 只有补码,没有原码。

 

在八位补码中,0~127,是按照正数的原码来存放的。

另外的 128~255,则是代表数字-128~-1。

 将 129~255 “取反加一”,即为-127~-1 原码。

 而 128,没有对应的原码。

八位补码转成原码的程序如下:

unsigned char getbits(unsigned char value)

{ // value : 0~255

if (value == 128)  printf("此补码并无原码")

else  if (value >128) value = ~value + 1 + 128

//如果是负数,取反加一,并补上符号位,得到原码

return  value //返回原码

}

这要看你算不算符号位。

正常情况下最高位是符号位,所以最高位不升汪姿变,其余位数的二进制数-1(111111111110100-1=111111111110011)再取反,即000000000001100。

算上最高位符号位陵举1,原码就是1000000000001100,对应10进制就是吵绝-12。

#include <伏槐悄stdio.h>

int main()

{

char in[10], out[10]

scanf("%s", in)

if(strlen(in) < 8 || in[0] == 0) printf("%s\n", in)

else

{

int i

out[0] = '1' 

for(i = 1 i < 8 i ++)

{

if(in[i] 明态== '0'缺渣)

out[i] = '1'

else out[i] = '0'

}

for(i = 7 i >0 i --)

{

if(out[i] == '0')

{

out[i] = '1'

break

}

else out[i] = '0'

}

out[8] = 0

printf("%s\n", out)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12555992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存