通过补或芦坦型码来求原码?
你以为补码衫信带原码是一一对应的吗?
八位原码,可代表带符号数-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)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)