我今天接受了采访,他们要求我写两个"C"函数,一个用于提取单个位,另一个用于从字符中提取一系列位.我花了一段时间想出了这些方法.
int extractBit(char byte, int pos) {
assert( (pos >= 0) && (pos < 8) );
return ( ( byte & (1<<pos) ) >> pos);
}
char extractBitRange(char byte, int startingPos, int offset) {
assert( ( (startingPos + offset) >= 0) && ( (startingPos + offset) < 8) );
return ( byte >> startingPos ) & ~(0xff << (offset + 1));
}
Run Code Online (Sandbox Code Playgroud)
但是面试官一直在问我是否可以进一步加快代码(就cpu周期而言)以及是否有任何优化范围可以实现它.我显然不合适,我很想知道你会怎么做?
Pas*_*uoq 18
在extractBit中,如果先移动,则可以使用1而不是掩码(1<<pos).考虑到pos是函数的参数,可以节省计算量.
return (byte >> pos) & 1;
在第二个函数中,我会断言startingPos并且offset都是正面的,而不是断言它们的和是正的,它更有意义.
| 归档时间: |
|
| 查看次数: |
10721 次 |
| 最近记录: |