一、一些面试题
例一、
用一个表达式,判断一个数X是否为2的N次方,不用循环语句。
结果:!(X&(X-1))
例二、
取两个变量中较大数,不适用if,?,switch或其他判断语句。
结果:int max = (a+b+abs(a-b))/2
例三、
不使用中间变量交换a,b。
结果:
例四、取0的反码。
错误写法:
unsigned int zero = 0;
unsigned int zerocomplement = 0Xff;
正确写法:
unsigned int zero = 0;
unsigned int zerocomplement = ~zero;
说明:需要考虑到在不同字长的机器上的移植性,错误写法默认16位,只能在16位机上运行,二使用位运算写的代码将不受字长限制,具有很好的移植性。
例五、下面代码:
int f(int x, int y)
{
return (x&y+(x^y)>>1);
}
二、嵌入式系统中的典型应用。
应用一:将寄存器中的某一位置1或则清0,保持其他位不变。
int
void SetBit(int pos)//将某一位置位的操作
{
}
void ClrBit(int pos)//将某一位清0的操作
{
}