有表达式可以判断出一个数是2的n次方?
时间:2010-07-26
来源:互联网
作者: zylthinking 发布时间: 2010-07-26
作者: bruceteen 发布时间: 2010-07-26
作者: donglongchao 发布时间: 2010-07-26
bruceteen 发表于 2010-07-26 11:56
正解,UP
作者: davelv 发布时间: 2010-07-26
作者: zylthinking 发布时间: 2010-07-26
作者: zhangsuozhu 发布时间: 2010-07-26

作者: mirnshi 发布时间: 2010-07-26
另
6符合
6&(6-1)==0
想想看N^(N-1)行不行
作者: folklore 发布时间: 2010-07-26
另
6符合
6&(6-1)==0
想想看N^(N-1)行不行
folklore 发表于 2010-07-26 12:19
110
101
-----
100
作者: mirnshi 发布时间: 2010-07-26
作者: zhangsuozhu 发布时间: 2010-07-26
10..0
n-1,必然是
1...1
所以n & (n - 1) === 0
作者: mirnshi 发布时间: 2010-07-26
1 00000010
2 00000100
3 00001000
4 00010000
5 00100000
6 01000000
7 10000000
作者: zhaohongjian000 发布时间: 2010-07-26

作者: pandaiam 发布时间: 2010-07-26
原因:
奇数时:
n:Bit0为1
n-1:Bit0为0,其余位不变
可行
偶数时:
n-1将只改变从Bit0到Bit{从Bit0开始,值为0的所有Bit}为1,同时将第一个非0Bit置为0
确识可行
作者: folklore 发布时间: 2010-07-26
10..0
n-1,必然是
1...1
所以n & (n - 1) === 0
mirnshi 发表于 2010-07-26 12:23
这个结论是对的,但不能排除别的数符合这个条件担不是2的n次方。
作者: zhaohongjian000 发布时间: 2010-07-26
zhaohongjian000 发表于 2010-07-26 12:29
例如......?
作者: mirnshi 发布时间: 2010-07-26
这就是数学中常说的充分与必要条件吧。
作者: ecjtubaowp 发布时间: 2010-07-26
作者: zhaohongjian000 发布时间: 2010-07-26
作者: tinysniper 发布时间: 2010-07-26
如果一个数的二进制中有两个或以上的位不为0,那么减1的话高位的1是不会变成0的,这样按位或结果一定不是0。
作者: zhaohongjian000 发布时间: 2010-07-26
原理:只有当 n 的位序列中仅存在一个 1 的时候,才可能使 [(n - 1) XOR n] >= n
测试了 [1, 1024] 的整数,以及 0, 2147483648, 4294967296 等边界条件,均可以正常判断。
作者: langue 发布时间: 2010-07-26
原理:只有当 n 的位序列中仅存在一个 1 的时候,才可能使 ...
langue 发表于 2010-07-26 13:09
恩, 原理相同, 但很显然比2楼的表达式更难懂一些, 而且, 似乎没有 ((n ^ (n - 1)) == n) 的情况
作者: zylthinking 发布时间: 2010-07-26
令 n := 1,
可知 [n ^ (n - 1)] = 1
因此 (n ^ (n - 1)) == n
不过确实考虑复杂了。
作者: langue 发布时间: 2010-07-26
作者: xiboboy 发布时间: 2010-07-26
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28