20155317 十六周second 取值
20155317 十六周second 取值
题目如下图:
secondset
#define base 0xFFFFC0000 # #define &clock base+2 void setsecond(int second) { clock = clock&~(0x1F);//将0-4位清零 clock = clock|(second)//将值进行合并 }
在set的过程中,我们需要将second部分进行赋值,赋值我们采用“先清零”再“或运算”的方式,先和1111111111100000进行运算,将0-4位清零,其他位保证不变,再与second进行或运算,最终就成功将second加入时间变量里面。
secondsget
#define base 0xFFFFC0000 # #define &clock base+2 int getsecond(int second) { second = clock &(0x1F);//取值 return second; }
在get的过程中,我们需要将除了second以外的部分清零,在这里直接与0000000000011111与运算,剩下的正好是我们需要的值。