C将二进制数与xor进行比较

时间:2016-03-23 17:39:36

标签: c

这是代码的一部分。在这里,我想通过xor比较数字。 所以它假设给" 0111"但它给出了" 111"结果。 我该如何解决? 所以它假设给" 0111"但它给出了" 111"结果。 我该如何解决?

1 and 1 = 0
1 and 0 = 1
0 and 1 = 1
0 and 0 = 0



#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()

{   
    int BinaryRepForDisk1=1101, BinaryRepForDisk2=1010, Disk3=0, xor1, xor2, power=0;

    while(BinaryRepForDisk1!=0)
    {
        xor1=BinaryRepForDisk1%2;
        xor2=BinaryRepForDisk2%2;

        if(xor1==xor2)
        {
            Disk3=Disk3+pow(10,power)*0;
            power++;
        }

        else
        {
            Disk3=Disk3+pow(10,power)*1;
            power++;        
        }   

        BinaryRepForDisk1=BinaryRepForDisk1/10;
        BinaryRepForDisk2=BinaryRepForDisk2/10;
    }   
    printf("%d",Disk3);



    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:0)

它是相同的数字,因为你正在使用小数。唯一的问题是,如果您希望将打印结果强制为4位数并用零填充,请使用不同的打印格式化程序:

printf("%04d",Disk3);

答案 1 :(得分:0)

如果您使用二进制数字,则需要在数字前使用 0b

int BinaryDisk1 = 0b1101, BinaryDisk2 = 0b1010;

C也有一点xor位:

int result = BinaryDisk1 ^ BinaryDisk2;

我希望这可以帮到你。

答案 2 :(得分:0)

使用时

int BinaryRepForDisk1=1101, BinaryRepForDisk2=1010;

您正在将BinaryRepForDisk1初始化为十进制数1101,而不是二进制数1101。要获得二进制1101的十进制等效值,可以使用:

int BinaryRepForDisk1= ( (1 << 3) + (1 << 2) + 0 + 1);
// You can use (0 << 1) to keep the familiar structure but its not needed.

如果您的编译器支持二进制文字,您可以使用:

int BinaryRepForDisk1= 0b1101;

您可以对BinaryRepForDisk2的值进行类似的调整。