求一个数的格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。 (此描述来自百度)
下面将用java代码来打印某个数的 gray 码。
/*
功能:求一个数的 gray 码
输入:随机输入一个数字
输出:这个数的 gray 码
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("输入一个数字:");
int num = input.nextInt();
int b = (int)(Math.log(num)/Math.log(2)); // gray 码的位数为b+1 位
System.out.print("这个数的Gray码为:");
for( ; b>=0; b--){ //从高位到低位,每循环一次,输出一位
int d = (int)Math.pow(2,b);
if(num >= Math.pow(2,b)){
num = d-1-(num-d);
System.out.print(1);
}else{
System.out.print(0);
}
}
}
}