i = 0000, Si = 0000
i = 0001, Si = 0001
i = 0010, Si = 0011
i = 0011, Si = 0010
i = 0100, Si = 0110
i = 0101, Si = 0111
i = 0110, Si = 0101
i = 0111, Si = 0100
i = 1000, Si = 1100
i = 1001, Si = 1101
i = 1010, Si = 1111
i = 1011, Si = 1110
i = 1100, Si = 1010
i = 1101, Si = 1011
i = 1110, Si = 1001
i = 1111, Si = 1000
i=10000,Si =11000
i=10001,Si =11001
i=10010,Si =11011
i=10011,Si =11010
i=10100,Si =11110
i=10101,Si =11111
i=10110,Si =11101
发现什*么规律?
规律是i 和 Si 的第一个非零位相同;
最后一位的规律是LSB no.1 = ( i & 2 ) ^ ( i & 1 ),也就是说 i 最后两位的异或。
其实其他所有位也遵循这个规律. 对于结果的任何一位,其实都是index对应位和index对应的前一位的异或. 也就是说, Result = Index ^ ( Index >> 1 ).
Pseudo code:
OutputSerial( int n )
{
for( unsigned int i = 0; i < pow(2, n); i ++ )
printf("%x,", i ^ ( i >> 1 ) );
}