您的位置:首页 > 编程语言 > Java开发

一个int变量能装一个月的签到信息?

2014-12-08 11:57 176 查看
先给出答案:能!并且可以标识这个月内哪天签到过、哪天未签到、并且统计签到的天数!

能够做到这些,得力于对二进制、位运算的应用:int有32位,一个月最多有31天

直接上代码:

public static void main(String args[])
{
int data = 0;
data = (int)setBin_1(data,0);//签到
data = (int)setBin_1(data,1);//签到
data = (int)setBin_1(data,3);//签到
data = (int)setBin_0(data,1);//修改第二天为未签到
data = (int)setBin_1(data,4);//签到
System.out.println(getBin(data, 0)==1?"已签到":"未签到");
System.out.println(getBin(data, 1)==1?"已签到":"未签到");
System.out.println(getBin(data, 2)==1?"已签到":"未签到");
System.out.println(getBin(data, 3)==1?"已签到":"未签到");
System.out.println(getBin(data, 4)==1?"已签到":"未签到");
System.out.println("这个月签到次数:"+getCount(data));
}

/**设置数字上某一位的数值为0*/
public static long setBin_0(long data,int index)
{
return ~(1 << index) & data;
}

/**设置数字上某一位的数值为1*/
public static long setBin_1(long data,int index)
{
return 1 << index | data;
}

/**获取数字上某一位的数值*/
public static long getBin(long data,int index)
{
return data >> index & 1;
}

/**计算一个数所有位中1的总数*/
public static byte getCount(long data)
{
byte count = 0;
for (int i = 0; i < Long.SIZE; i++) {
count += getBin(data, i);
}
return count;
}
输出:
已签到

未签到

未签到

已签到

已签到

这个月签到次数:3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二进制 位运算 Java
相关文章推荐