制作1的补码,如果我加一个负数,为什么它不起作用

时间:2018-05-07 06:14:00

标签: c arrays

如果我把正数放在上面它会很好但如果我把负数放在上面它就不起作用。 但是,如果我复制并粘贴唯一的1的补码部分的代码,它就有效。 如果我把-12,它显示绝对:10001100和1的补码:11110011。 idk为什么它不起作用帮助:(

    //1's complement_1
    {
        printf("\n 1's complement:");
        if (decimal_1 < 0)
        { decimal_1 = - decimal_1; bi_1[0] = 1; }
            for(i_1=7; i_1>0 ;i_1--)
            {
                bi_1[i_1]=decimal_1%2;
                decimal_1=decimal_1/2;
            }
            Fcomplement_1[0]=1;
            for(i_1=1 ; i_1<8; i_1++ )
            {
                if (bi_1[i_1]==0)
                    Fcomplement_1[i_1]=1;
                else
                    Fcomplement_1[i_1]=0;
            }
            for(i_1=0; i_1<8; i_1++)
                printf("%d", Fcomplement_1[i_1]);
        }
        else
            for (i_1=0 ; i_1<8 ; i_1++)
                printf("%d",bi_1[i_1]);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

在1的补码块中,你测试decimal_1 < 0,这是永远不会的,因为它在前一个块中被修改为零。

您应该将用户输入复制到第二个变量,以便处理未修改的值。

答案 1 :(得分:0)

第一个输出不是绝对值,而是符号+幅度表示:-12给出10001100

第二个循环过于复杂,如果零位(符号)的位为1,则应该反转位置1到7中的位。

这是一个简化版本:

#include <stdio.h>

int main(void) {
    int decimal_1, bi_1[99], i_1;
    int decimal_2, bi_2[99], i_2;
    int Fcomplement_1[99]; 

    printf("Input two decimal numbers: ");
    if (scanf("%d%d", &decimal_1, &decimal_2) != 2)
        return 1;

    // decimal_1 
    {
        if (decimal_1 < 0) {
            decimal_1 = -decimal_1;
            bi_1[0] = 1;
        } else { 
            bi_1[0] = 0;

        for (i_1 = 7; i_1 > 0; i_1--) {
            bi_1[i_1] = decimal_1 % 2;
            decimal_1 = decimal_1 / 2;
        }

        printf("absolute value: 0");
        for (i_1 = 1; i_1 < 8; i_1++)
            printf("%d", bi_1[i_1]);
        printf("\n");
        printf("sign+magnitude representation: ");
        for (i_1 = 0; i_1 < 8; i_1++)
            printf("%d", bi_1[i_1]);
        printf("\n");
    }

    //1's complement_1
    {
        Fcomplement_1[0] = bi_1[0];
        for (i_1 = 1; i_1 < 8; i_1++) {
            Fcomplement_1[i] = bi_1[i] ^ bi_1[0];
        }
        printf("1's complement: ");
        for (i_1 = 0; i_1 < 8; i_1++)
            printf("%d", Fcomplement_1[i_1]);
        printf("\n");
    }
    return 0;
}