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

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


置位操作:

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

清零操作:

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

取反操作:

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

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

#define a 0xfff0
#define n 3


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

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]);


你可能感兴趣的:(定义一个宏,实现对数据a的第n位置位、清零、取反)