zoukankan      html  css  js  c++  java
  • 格雷码证明

    格雷码证明

    x为原来的数,y为格雷码,两者都用二进制表示

    y=x xor (x shr 1)

    可认为y(k)=x(k) xor x(k+1),其中y(k)为y的从低到高第k位,x(k)为x的从低到高第k位。设二进制位数为n,注意x(n+1)=0。

    1.所有二进制对应的格雷码都不相同

    x->y    y(k)=x(k) xor x(k+1)

    p->q    q(k)=p(k) xor p(k+1)

    若y=q,则:y(n)=q(n),求得x(n)=y(n);y(n-1)=q(n-1),求得x(n-1)=y(n-1);依次类推,x(1)=y(1),所以x=p。得证。

    2.二进制下相邻的两个数对应的格雷码有且只有一位不相同,其它位都相同

    二进制下相邻的两个数为x和s,其中x=s+1。而y=x xor (x shr 1), t=s xor (s shr 1),

    要证明y和t有且只有一位不相同,其它位都相同

    I.x的最后一位为1

    x

    a[n]

    a[n-1]

    ……

    a[1]

    1

    x shr 1

     

    a[n]

     

    a[2]

    a[1]

    y

     

     

     

     

    Diff

    s

    a[n]

    a[n-1]

    ……

    a[1]

    0

    s shr 1

     

    a[n]

    ……

    a[2]

    a[1]

    t

     

     

     

     

    Diff

    II.x的最后一位为0

    x

    a[n]

    a[n-1]

    ……

    a[k+1]

    1

    0

    0

    ……

    0

    0

    x shr 1

     

    a[n]

    ……

    a[k+2]

    a[k+1]

    1

    0

    ……

    0

    0

    y

     

     

     

     

    Diff

     

     

     

     

     

    s

    a[n]

    a[n-1]

    ……

    a[k+1]

    0

    1

    1

    ……

    1

    1

    s shr 1

     

    a[n]

    ……

    a[k+2]

    a[k+1]

    0

    1

    ……

    1

    1

    t

     

     

     

     

    Diff

     

     

     

     

     

    所以得证。

    3.

    二进制->格雷码:y(i)=x(i) xor x(i+1)   [x(n+1)=0]  (规定)

    格雷码->二进制:x(i)=x(i+1) xor y(i)

    证明 格雷码->二进制:x(i)=x(i+1) xor y(i) 的正确性:

    x(i)=x(i+1) xor y(i)=x(i+1) xor x(i) xor x(i+1)=x(i)

    得证。

  • 相关阅读:
    文件的权限
    正则表达式
    软硬链接的学习
    linux系统中的文件类型和扩展名
    把数组排成最小的数
    整数中1出现的次数(从1到n整数中1出现的次数)
    最小的K个数
    连续子数组的最大和
    数组中出现次数超过一半的数字
    字符串的排列
  • 原文地址:https://www.cnblogs.com/cmyg/p/6565627.html
Copyright © 2011-2022 走看看