gistfile1.txt public static class BitWeekDay { private static final int WEEK_BITS = 3; private static final int HOUR_BITS = 4; private static final int Hour_PERIOD_BITS = 1; private static final int HOUR_LEFT_SHIFT_BITS = Hour_PERIOD_BITS;
public static class BitWeekDay { private static final int WEEK_BITS = 3; private static final int HOUR_BITS = 4; private static final int Hour_PERIOD_BITS = 1; private static final int HOUR_LEFT_SHIFT_BITS = Hour_PERIOD_BITS; private static final int WEEK_LEFT_SHIFT_BITS = HOUR_LEFT_SHIFT_BITS + HOUR_BITS; public static int toBits(int week, int hour) { if (hour > 12) { // pm return toBits(week, hour - 12, 1); } // am return toBits(week, hour, 0); } private static int toBits(int week, int hour, int hourPeriod) { return week << WEEK_LEFT_SHIFT_BITS | hour << HOUR_LEFT_SHIFT_BITS | hourPeriod; } public static int getWeek(int bits) { return (bits >> WEEK_LEFT_SHIFT_BITS) & ((1 << WEEK_BITS) - 1); } public static int getHour(int bits) { if (getHourPeriod(bits) == 0) { // am return (bits >> HOUR_LEFT_SHIFT_BITS) & ((1 << HOUR_BITS) - 1); } // pm return ((bits >> HOUR_LEFT_SHIFT_BITS) & ((1 << HOUR_BITS) - 1)) + 12; } private static int getHourPeriod(int bits) { return bits & ((1 << Hour_PERIOD_BITS) - 1); } }