Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1722800
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: LINUX

2020-04-03 14:57:24

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))
阅读(1006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~