要提取无符号32位整数的高位字和低位字,并将每个字存储在单独的uint16_t变量中,我执行如下操作(nbr是无符号的32位整数):
uint16_t lower_word = (uint16_t) nbr & 0x0000FFFF; // mask desired word
uint16_t upper_word = (uint16_t) ((nbr & 0xFFFF0000) >> 16); // right-shift after masking
Run Code Online (Sandbox Code Playgroud)
显式转换为uint16_t是不必要的吗?还有什么其他更有效的方法,如果有的话,你建议获得所需的结果而不是这种方法吗?
我希望检查 32 位寄存器中的多个位是否为了操作硬件而设置或清除。我采用以下方法来检查是否设置了所uint32_t
调用的-variable的所需位(位 8 和位 1)statusRegister
:
if ((statusRegister & 0x00000102) == 0x00000102) {}
Run Code Online (Sandbox Code Playgroud)
以及以下检查是否清除了想要的位:
if ((statusRegister | ~0x00000102) == ~0x00000102) {}
Run Code Online (Sandbox Code Playgroud)
这样对吗?有没有更简洁的方法呢?
下面的模板函数为存储在向量中的二元函数对象序列apply_all
采用迭代器范围 ( itBegin -> itEnd
) 。在我进行迭代时,我希望使用两个给定的参数和来调用每个函子。结果要写入( ),但我不知道如何使用迭代器变量调用函子:a
b
Output Iterator
outIt
template <typename InIt, typename OutIt, typename A, typename B>
void apply_all(InIt itBegin, InIt itEnd, OutIt outIt, const A& a, const B& b)
{
for(auto it = itBegin; it != itEnd; it++)
{
*outIt = ... // how do I call the functor pointed to by *it?
outIt++;
}
}
Run Code Online (Sandbox Code Playgroud)