zoukankan      html  css  js  c++  java
  • 格雷编码

    格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

    给定一个代表编码总位数的非负整数 n,打印格雷码序列。格雷码序列必须以 0 开头。

    例如,给定 n = 2,返回 [0,1,3,2]。其格雷编码是:

    00 - 0
    01 - 1
    11 - 3
    10 - 2

    解题思路:

    二进制码转换成二进制格雷码,其方法是二进制码的最高位不变,其余位与其前一位做异或运算。

    如二进制码0010

    第4位0与第3位1异或的1;

    第3位1与第2位0异或的1;

    第2位0与第1位0异或的0;

    第1位保持不变,任然为0;

    故其对应的二进制格雷码位0011 。

    对于整数i,求其对应的格雷码,可使用上述方法,i的格雷码为i^(i>>1) 。(无需将i转换为二进制码)

    ^为异或运算,>>为右移一位。

    i的每一位与前一位做异或运算就等价于i与i右移一位的结果做异或运算。

    实现代码如下:

        public static List<Integer> test(int n) {
    
            List<Integer> list = new LinkedList<>();
            int N = 1<<n;
            for (int i=0; i<N; i++)
                list.add(i ^ (i>>1));
            return list;
        }
  • 相关阅读:
    关于程序收到消息的顺序
    窗口过程
    消息循环
    解剖窗口程序
    开始了解窗口程序
    编码的规范
    汇编的除法和乘法
    Win32汇编--Win32汇编的高级语法
    H5-音频列表音乐切换
    移动端-ibokan
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9174869.html
Copyright © 2011-2022 走看看