昨天去中海达面试时配到了一道很经典的题目,就是设置整数的某一位为1或0。这在驱动开发,特别是跟硬件打交道特别多的代码中经常需要。 废话不多说,下面相关的代码,原来在考场中只写出了设置为1的代码,设置为0的代码写错了。
1、设置整数的第n位为1数
int a ;
a |= (1 << n);
2、设置整数的第n位为0
int a;
a &= ~(1<<n);
(这里要注意的问题是:在移位过程中补的是0,而不是1,我就是因为这个问题而把设置为0的代码写成了:
a &=(0<<n),这是要注意的地方)