我有4个二进制位
Bit 3 Bit 2 Bit 1 Bit 0
通常答案很简单:2 ^ 4,或16种不同的组合; 它看起来像下面这样:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
但是,LSB(位0)每次迭代都会改变状态.
我需要一种算法,其中一个位的状态仅在所有迭代中改变一次; 即,我需要所有的位像MSB(位3).
我怎样才能做到这一点?
似乎大多数人正在融合只有5种可能的解决方案.然而,这假设有一个起点和一个终点.这无所谓,所以我将给出一个真实世界的场景来更好地解释.
假设我有一个数字闹钟,可以提供4个输出.每个输出可以被编程为在特定时间继续并且在特定时间关闭并且彼此独立地编程,例如.我可以将输出1编程为上午1点和凌晨3点关闭,而我可以将输出2编程为下午7点和下午2点关闭.每个输出可以保持多长时间没有限制.
现在我想把这个闹钟挂在电脑上,尽可能接近当前的正确时间.即如果时钟表示时间是下午2:15,我的计算机就知道警报在下午12点到下午6点的范围内.我希望能够获得尽可能小的范围.什么是我能得到的最小范围?
有4位.
每个位只能改变一次状态.
对于每个新值,至少有一个位必须已从先前值更改状态.
因此,您最多可以有4个状态更改,最多可以有5个不同的值.
例:
0000 -> 0001 -> 0011 -> 0111 -> 1111
编辑:
很好,让我们重温你的意思,而不是你所说的.
有4位.
每个位只能改变状态两次.(一次从0到1,一次从1到0)
对于每个新值,至少有一个位必须已从先前值更改状态.
因此,您最多可以有8个状态更改,最多可以有8个不同的值(因为最后一次状态更改必然会将所有位恢复到初始状态)
例:
0000 -> 0001 -> 0011 -> 0111 -> 1111 -> 1110 -> 1100 -> 1000 -> 0000
因此,通过将输出设置为:3 AM - 3 PM,6 AM - 6 PM,9 AM - 9 PM和中午 - 午夜,您可以确定输出的3小时周期.我建议将电线插入视觉输出中.
你想要格雷码.看看"构造一个n位格雷码"的一半.