首页 > 解决方案 > 制作1的补码,为什么如果我输入负数它不起作用

问题描述

如果我输入正数,它工作得很好,但如果我输入负数,它就不起作用。但是,如果我复制并粘贴唯一的 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;
}

标签: carrays

解决方案


在 1 的补码块中,您测试decimal_1 < 0,这绝不是真的,因为它在前一个块中被修改为零。

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


推荐阅读