1. 判断一个数是否是4的幂次方
#define IS_POWER_OF_4(x) (!(x & (x-1)) && !((x-1) % 3))
!(x & (x-1)) 经典地判断2的幂次方
2的幂次方可以分为2的偶次方即2^2n和2的奇次方即2^(2n+1), 二者有什么区别呢?
(!(x & (x-1)) && !((x-1) % 3)) 判断2的偶次方(2^2n), 即通过判断2的偶次方(2^2n)能被3整除。
(!(x & (x-1)) && (((x-1) % 3) == 1)) 判断2的奇次方(2^(2n+1)), 即通过判断2的奇次方(2^(2n+1))除3后余1.
1.1 证明"2的偶次方(2^2n)能被3整除"
参考:
"这个题不难。设 N/2 为m,据题设,m 为整数。记 2 的 N 方为2^N ,则 2^N - 1 = ( 2^m)^2 - 1 =( 2^m - 1 ) ( 2^m + 1 ),2^m - 1、2^m、2^m + 1 是三个连续整数,一定有一个是 3 的倍数。2^m肯定不是,故 2^m - 1、2^m + 1两数中一定有一个是 3 的倍数。"
1.2 证明"2的奇次方(2^(2n+1))除3后余1"
参考:
"这个就是2的n次方(当n为偶数时)-1的变式,当n为奇数时2^n-1(n为奇数)除以3余1,先减1,就变成了2^n-2(n为奇数)能被3整除,再提取2出来即可"
2. 判断如: 0x3, 0xc, 0x30, 0xc0的数
#define IS_LIKE_0x3_0xc_0x30_0xc0(x) (!(x%3) && IS_POWER_OF_4(x/3))
阅读(1059) | 评论(0) | 转发(0) |