C, xor

2016-03-23 14 views
-4

ile ikili sayıları karşılaştırarak bu kodun bir parçasıdır. Burada xor ile rakamları karşılaştırmak istiyorum. Yani "0111" vermeyi düşünüyoruz, ancak sonuç olarak "111" değerini veriyor. Nasıl düzeltebilirim? Yani "0111" vermeyi düşünüyoruz, ancak sonuç olarak "111" değerini veriyor. Nasıl düzeltebilirim?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' * - bu, ikili olarak temsil edilen bir sayı değil. Bu bin yüz birdir. – axiac

+1

'111' ve' 0111' eşittir. – jadhachem

+1

@jadhachem: Ehm ... hayır! – Olaf

cevap

0

Aynı sayıdır, çünkü ondalıklarla çalışıyorsunuzdur. , Kullanmak gerekir

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

Ancak, bunu başka bir amaç için yapmadığınız sürece, gerçek ikili temsilleri ve xor işlemini kullanmanızı öneririm. – sidyll

+0

ancak BinaryRepForDisk1 ve BinaryRepForDisk2 değeri değiştirilebilir. Bu değerleri örnek olarak yazdım – user302686

0

ikili sayılarla çalışıyorsanız: tek şey, yazdırma sonucunu istiyorsanız yerine farklı baskı biçimlendirici kullanmak, 4 basamak olarak zorlanan ve sıfırlar ile takviye edilecek, yani numaradan önce 0b:

int result = BinaryDisk1^BinaryDisk2; 

Bunu size yardımcı olabilir umut:

int BinaryDisk1 = 0b1101, BinaryDisk2 = 0b1010; 

C de bir yada biti biraz var.

0

Eğer sen ondalık sayı 1101 için BinaryRepForDisk1 başlatılıyor

int BinaryRepForDisk1=1101, BinaryRepForDisk2=1010; 

kullandığınızda, değil ikili sayı 1101. İkili 1101 ondalık eşdeğerini almak için, kullanabilirsiniz: derleyici ikili değişmezleri destekler

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

varsa, kullanabilirsiniz:

int BinaryRepForDisk1= 0b1101; 

Sen BinaryRepForDisk2 değerine benzer ayarlamalar yapabilirsiniz.

İlgili konular