2012-03-21 133 views
-1

的按位異或(XOR)運算的結果的整數可以被應用於兩個二進制數,其中兩個對應比特之間:創建一個遞歸函數返回一個XOR操作

  • 1 XOR 1 = 0
  • 1 XOR 0 = 1
  • 0 XOR 1 = 1
  • 0 XOR 0 = 0

例如,1101011 xor 1010101 = 0111110

定義一個遞歸函數,該函數接受模擬兩個輸入二進制數的兩個整數參數,並以整數形式返回異或運算的結果。調用並測試主程序中的功能。 (注意:結果的前面的零可能不會出現在顯示屏上,這是可以的)。

我該如何去做這件事?

+0

究竟如何是應該「模擬」二進制數的整數參數? (另外,我假設使用'^'是禁止的嗎?) – jwodder 2012-03-21 00:31:09

+1

0111110應該是111,110(一百一十一,一百一十)? (模擬二進制數?) – Marlon 2012-03-21 00:33:17

+0

你嘗試過什麼?這聽起來像是和作業一樣,因爲你不會在現實生活中以這種方式評估XOR。 – 2012-03-21 01:17:00

回答

1

如果您發送十進制的參數,那麼這樣的事情可能工作:

void recursiveXor(int a, int b){ 

    if(0 == a && 0 == b) 
     return; 

    int old = (a % 2)^(b % 2); 

    recursiveXor(a/2, b/2); 

    printf("%d", old); //System.out.println(old); if it is Java 

} 

如果參數以二進制表示(例如:recursiveXor(111, 1101))則:

void recursiveXor(int a, int b){ 

    if(0 == a && 0 == b) 
     return; 

    int old = ((a%10) + (b%10)) % 2; 

    recursiveXor(a/10, b/10); 

    printf("%d", old); //System.out.println(old); if it is Java 

} 
+0

@ m102 - 如果第一個是'int old =(a%2)^(b%2);'而不是'int old =(a&1)^(b & 1);'在這兩個表示之間(十進制和二進制)更清晰 – gbulmer 2012-03-21 00:57:46

+0

@gbulmer我的權利,我會編輯 – m1o2 2012-03-21 01:19:18

+0

你似乎有十進制和二進制切換你的'十進制'代碼不驗證數字只是0和1 – 2012-03-21 01:19:27