我试图将二进制转换为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 :(得分: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;
}
答案 1 :(得分:0)
应该可以正常工作。也许在printf处添加\ n以在结果行中添加换行符。