C 正在尝试将二进制代码转换为灰色代码
我试图将二进制代码转换为格雷码,但我不知道这段代码有什么问题:C 正在尝试将二进制代码转换为灰色代码,c,binary,C,Binary,我试图将二进制代码转换为格雷码,但我不知道这段代码有什么问题: #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
#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;
}
#包括
//我从wiki复制了这个函数
unsigned int binaryToGray(unsigned int num){
返回num^(num>>1);
}
int main(int argc,const char*argv[]{
无符号整数二进制数=10;
unsigned num=binaryToGray(binarynum);
printf(“%d!!”,num);
返回0;
}
这应该可以正常工作。可以在printf处添加\n以在结果行中添加换行符。要查看灰码的工作方式,请添加一个将数字转换为二进制表示形式的函数:
#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;
}
#包括
char*numtobin(char*buf,unsigned int num){
煤焦温度[65],*p=buf+sizeof(buf);
*--p='\0';
而(num>=2){
*--p='0'+(数值和1);
num>>=1;
}
*--p='0'+num;
返回strcpy(buf,temp);
}
//我从wiki复制了这个函数
unsigned int binaryToGray(unsigned int num){
返回num^(num>>1);
}
int main(int argc,const char*argv[]{
char buf1[65],buf2[65];
无符号整数,greynum;
对于(num=0,num),那么对于特定的输入,您得到的输出是什么?是否有任何错误?这是经典的二进制到灰色代码转换函数,它做了什么您不期望的事情?如果输出没有出现,请修改printf
以添加尾随换行:printf(“%d!n”,num)
输入是10,它应该给我一个11英寸的灰色代码,但是这个代码打印的1510不是十进制的!试试2(十进制表示二进制10),它应该输出3(十进制表示11二进制)。谢谢,你说得对,这是works@JoshSu:如果这个答案符合你的需要,你能接受吗?