693  判断一个数的二进制是不是01交替出现

                                                                                                                                          点击此处返回总目录

 

【题目】

693  判断一个数的二进制是不是01交替出现

693  判断一个数的二进制是不是01交替出现

 

【方法一】

记录下最后一位,每次右移一下看看最后一位是不是相反。

 

代码:

693  判断一个数的二进制是不是01交替出现

 

结果:

693  判断一个数的二进制是不是01交替出现

 

 

【方法二】

假设串为:  10101010

串右移1位:01010101

异或为:      11111111。

 

假设串为:   00000101

串右移1位: 00000010

异或为:      00000111。

 

假设串为:   00001010

串右移1位: 00000101

异或为:      000001111.

 

当异或结果全为1时,说明原来的串是01交替出现的。

 

证明:

如果串出现了"00"。(不包括高位的0)

右移一位:    "*0"

异或为    :    "*0"

 

如果串出现了"11"

右移一位:   "*1"

异或为:       "*0"

 

如果串中出现了"01"

右移一位:       "*0"

异或为:          "*1"

 

如果串中出现了"10"

右移一位:       "*1"

异或为:           "*1"

 

因此只有当不存在"00"和"11"时,异或结果才不出现0。

 

最后怎么判断一个二进制串中只有1没有0呢?

  11111111

+            1 

-------------

  0000000

 

   00000111

+              1

---------------

   00001000

 

如果a&(a+1)等于0,说明a全是1串。

证明:

如果一个串不全是1,比如1101

加1之后,高位的1不变。为:1110

相与的话得到1100。不为0。

 

代码:

693  判断一个数的二进制是不是01交替出现

 

结果:

693  判断一个数的二进制是不是01交替出现