首页 > 其他 > 详细

利用位运算求一个月的天数

时间:2016-02-23 09:38:16      阅读:200      评论:0      收藏:0      [点我收藏+]

先上代码:

1 int month(int n) {
2     n = (n / 8 + n % 2) % 2 + 30 - 2|(n - 2);
3 
4     return n;
5 }

计算思路:

下面是每个月的天数分布。

//              1   2   3   4  5   6   7   8   9 10 11 12
// 每个月:31 28 31 30 31 30 31 31 30 31 30 31

所以完全可以使用 30 作为基数。2月单独进行计算。从8月份进行分割,8月之前,1 0 1 0 1 0 1 。8月之后 0 1 0 1 

先除 8 ,小于8 的全部为 0 ,再对2 取模,单数天为 1 . 双数天为 0 .

带入运算:n = 12 ; n / 8 = 1; n %2 = 0; 1 %2 = 1; 1 + 30 = 31。

      31 - 2 = 29; 29 | 10 = 31;

得到结果: 31

  | 位运算,位或。二进制对应位如果同为零,则为零,其他为1。

 

利用位运算求一个月的天数

原文:http://www.cnblogs.com/chenstyle/p/5208738.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!