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与运算,剩下的正好是我们需要的值。
原文地址:https://www.cnblogs.com/wxwddp/p/8182272.html