2015-12-25 41 views
-3

我試圖二進制轉換爲greycode,但我不知道什麼是錯,此代碼:試圖二進制轉換爲greycode

#include <stdio.h> 

// I copied this function from wiki 
unsigned int binaryToGray(unsigned int num) { 
    return num^(num >> 1); 
} 

int main(int argc, const char *argv[]) { 
    unsigned int binarynum = 10; 
    unsigned num = binaryToGray(binarynum); 
    printf("%d!!", num); 
    return 0; 
} 
+0

那麼,什麼是你得到一個特定的輸入輸出?你有什麼錯誤嗎? – EkcenierK

+0

這是**經典的二進制格雷碼轉換功能,它不是您所期望的?如果輸出沒有出現,修改'printf'來添加一個尾部換行:'printf(「%d!n」,num);' – chqrlie

+0

輸入是10,它應該給我一個11位的灰色代碼,但是這個代碼打印15 –

回答

0

應該只是正常工作。也許在printf中添加\ n在結果行中有一個換行符。

1

爲了看代碼是如何工作的灰,添加一個數字轉換爲二進制表示的函數:

#include <stdio.h> 

char *numtobin(char *buf, unsigned int num) { 
    char temp[65], *p = buf + sizeof(buf); 

    *--p = '\0'; 
    while (num >= 2) { 
     *--p = '0' + (num & 1); 
     num >>= 1; 
    } 
    *--p = '0' + num; 
    return strcpy(buf, temp); 
} 

// I copied this function from wiki 
unsigned int binaryToGray(unsigned int num) { 
    return num^(num >> 1); 
} 

int main(int argc, const char *argv[]) { 
    char buf1[65], buf2[65]; 
    unsigned int num, greynum; 

    for (num = 0, num <= 32; num++) { 
     greynum = binaryToGray(num); 
     printf("%2d %6s -> %6s %-2d\n", 
       num, numtobin(buf1, num), numtobin(buf2, greynum), greynum); 
    } 
    return 0; 
} 
+0

@JoshSu:如果它符合你的需求,你能接受這個答案嗎? – chqrlie