作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我今天接受采访,他们要求我编写两个“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));
}
但面试官一直问我是否可以进一步加快代码速度(在 cpu 周期方面),以及是否有任何优化范围可以实现它。我显然心情不好,我很想知道你会怎么做?
最佳答案
在 extractBit 中,如果你先移动,你可以用 1
屏蔽而不是 (1<<pos)
.考虑到 pos 是函数的参数,这样可以节省计算量。
return (byte >> pos) & 1;
在第二个函数中,我会断言 startingPos
和 offset
两者都是正的,而不是断言它们的总和是正的,这样更有意义。
关于c - 如何以更优化的方式提取位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1516301/
我是一名优秀的程序员,十分优秀!