2016-03-23 9 views
-4

Dies ist Teil des Codes. Hier möchte ich die Ziffern mit xor vergleichen. So soll es "0111" geben, aber es gibt "111" als Ergebnis. Wie kann ich es beheben? So soll es "0111" geben, aber es gibt "111" als Ergebnis. Wie kann ich es beheben?C Binärzahlen mit xor vergleichen

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' * - dies ist keine Zahl, die binär dargestellt wird. Es ist eintausendeinhundertundeins. – axiac

+1

'111' und' 0111' sind gleich. – jadhachem

+1

@jadhachem: Ähm ... nein! – Olaf

Antwort

0

Es ist die gleiche Nummer, da Sie mit Dezimalzahlen arbeiten sind. Die einzige Sache ist, dass, wenn Sie das Druckergebnis sollen durchgesetzt werden vier Ziffern sein und mit Nullen aufgefüllt, anstatt einen anderen Druckformatierer- verwenden:

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

Aber ich empfehle echte binäre Darstellungen und xor-Operation, wenn Sie dies für einen anderen Zweck tun. – sidyll

+0

, aber der Wert von BinaryRepForDisk1 und BinaryRepForDisk2 ist änderbar. Ich habe diese Werte als Beispiel geschrieben – user302686

0

Wenn Sie mit binären Zahlen arbeiten, müssen Sie verwenden 0b vor der Nummer:

int BinaryDisk1 = 0b1101, BinaryDisk2 = 0b1010; 

C haben auch ein xor Bit ein bisschen:

int result = BinaryDisk1^BinaryDisk2; 

ich hoffe, das Ihnen helfen kann.

0

Wenn Sie

int BinaryRepForDisk1=1101, BinaryRepForDisk2=1010; 

verwenden Sie BinaryRepForDisk1 der Dezimalzahl 1101 initialisiert wird, nicht die binäre Zahl 1101. Um die Dezimaläquivalents des binären 1101 zu erhalten, können Sie verwenden:

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

Wenn Ihr Compiler binäre Literale unterstützt, können Sie verwenden:

int BinaryRepForDisk1= 0b1101; 

Sie können ähnliche Einstellungen im Wert von BinaryRepForDisk2 machen.