悲剧的网络竟然没保存下来,又得在写一遍,就记录一下面试官想要我回答正确但我却没有回答出的那道题:
用一个函数实现一个八位二进制数的反转?
网上答案很多,一搜一大吧,就把一个比较容易理解的方法贴在这里以供参考:
uint8 bin8_reserve(uint8 data)
{
data=(((data&0xf0)>>4)|((data&0x0f)<<4));
data=(((data&0xCC)>>4|((data&0x33)<<4));
data=(((data&0xAA)>>4|((data&0x55)<<4));
return data;
}
回来翻了一下书,复习了一下移位操作的相关知识,移位分为逻辑移位和算术移位,它们的区别就是在进行右移时是否考虑符号位,在C语言中对无符号数的移位操作都是逻辑移位,但是对于有符号数进行算术右移和逻辑右移是有很明显差别的,到底是进行逻辑移位还是算术移位,这是由编译器决定的,不同的编译器环境下产生的结果可能不一样,所以在程序中若采用了有符号数的右移位操作,那么该程序是不可移植的。