c - 如果我输入负数,则 1's complement, why it doesn' t 会起作用

标签 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;
}

最佳答案

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

第二个循环太复杂了,如果位置 0(符号)的位是 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;
}

关于c - 如果我输入负数,则 1's complement, why it doesn' t 会起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50208029/

相关文章:

c++ - 更改数组中元素的文本颜色

c - 打开 MP - 点积

谁能帮我找到这个 C 函数中的错误吗?

c - 如何使用 libcurl 检测摘要身份验证失败?

c - 在 c 中硬编码大小的最佳方法

c - 使用 C 中的 rand 函数用字母表填充数组

javascript - 从多个数组属性创建对象

在 C 中检查字符串数组中的字符串

c - 将值分配给数组并将其打印到控制台时遇到麻烦

arrays - 对于密集访问,先卡住数组是好是坏?