【问题标题】:C comparing binary numbers with xor [duplicate]C用xor比较二进制数[重复]
【发布时间】:2016-03-23 17:39:35
【问题描述】:

这是代码的一部分。在这里,我想通过 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;
}

【问题讨论】:

  • int BinaryRepForDisk1=1101 -- 这不是二进制表示的数字。是一千一百零一。
  • 1110111 相等。
  • @jadhachem:嗯……不!
  • 是的,但认为它是二进制的
  • 对不起,我是新人

标签: c


【解决方案1】:

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

printf("%04d",Disk3);

【讨论】:

  • 但我建议使用真正的二进制表示和异或运算,除非您这样做是出于其他目的。
  • 但是 BinaryRepForDisk1 和 BinaryRepForDisk2 的值是可变的。我写了这些值作为例子
【解决方案2】:

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

int BinaryDisk1 = 0b1101, BinaryDisk2 = 0b1010;

C也有点异或位:

int result = BinaryDisk1 ^ BinaryDisk2;

希望对你有帮助。

【讨论】:

    【解决方案3】:

    当你使用

    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 的值进行类似的调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2016-03-17
      • 1970-01-01
      • 2020-09-28
      • 2021-04-02
      相关资源
      最近更新 更多