定义一个宏,实现对数据a的第n位置位、清零、取反

来源:互联网 发布:软件测试周末班 编辑:程序博客网 时间:2024/06/05 21:07

今天去面试,被问到写一个宏,实现对一个数据的第n位取反的问题,当时蒙了没做出来,现在对数据的第n位置位、清零、取反进行总结一下


置位操作:

#define M1(a,n)    (a|(1<<n))

清零操作:

#define M2(a,n)   (a&~(1<<n))

取反操作:

 #define M3(a,n)  (a^(1<<n))

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

#define a 0xfff0
#define n 3


#define M1(a,n) (a|(1<<n))
#define M2(a,n)  (a&~(1<<n))
#define M3(a,n)  (a^(1<<n))


void main()
{
printf("M1(a,n)=%x\n",M1(a,n));
printf("M2(a,n)=%x\n",M2(a,n));
printf("M3(a,n)=%x\n",M3(a,n));
}

还问了一个问题是一个数组比不知道它的数据类型,计算数组的长度

我写的是:len = sizeof(array)/sizeof(array[0]);


阅读全文
0 0
原创粉丝点击