2016-03-23 52 views
-4

這是代碼的一部分。在這裏,我想通過xor比較數字。 所以它假設給「0111」,但它給「111」作爲結果。 我該如何解決它? 所以它假設給「0111」,但它給「111」作爲結果。 我該如何解決它?C比較二進制數與xor

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; 
} 
+1

*'int BinaryRepForDisk1 = 1101' * - 這不是以二進制表示的數字。它是一千一百一十。 – axiac

+1

'111'和'0111'是相等的。 – jadhachem

+1

@jadhachem:恩......不! – Olaf

回答

0

這是相同的數字,因爲您使用的是小數。唯一的一點是,如果你想打印結果被強制爲4位數字,並用零填充,使用不同的打印格式,而不是:

printf("%04d",Disk3); 
+0

但我建議使用真正的二進制表示法和異或操作,除非您爲了其他目的而這樣做。 – sidyll

+0

但BinaryRepForDisk1和BinaryRepForDisk2的值是可更改的。我以這些值作爲例子 – user302686

0

如果您在使用二進制數的工作,你需要使用0B號碼前:

int BinaryDisk1 = 0b1101, BinaryDisk2 = 0b1010; 

C也有XOR位位:

int result = BinaryDisk1^BinaryDisk2; 

我希望這可以幫助你。

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值。