小编Abd*_*eem的帖子

提取无符号32位整数的上下字

要提取无符号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是不必要的吗?还有什么其他更有效的方法,如果有的话,你建议获得所需的结果而不是这种方法吗?

c cpu-word uint32 uint16

4
推荐指数
2
解决办法
331
查看次数

检查是否设置或清除了多个位

我希望检查 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)

这样对吗?有没有更简洁的方法呢?

c bit-manipulation

4
推荐指数
1
解决办法
3295
查看次数

调用由模板函数内的迭代器“指向”的函子

下面的模板函数为存储在向量中的二元函数对象序列apply_all采用迭代器范围 ( itBegin -> itEnd) 。在我进行迭代时,我希望使用两个给定的参数和来调用每个函子。结果要写入( ),但我不知道如何使用迭代器变量调用函子:abOutput IteratoroutIt

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)

c++ functor

2
推荐指数
1
解决办法
78
查看次数

标签 统计

c ×2

bit-manipulation ×1

c++ ×1

cpu-word ×1

functor ×1

uint16 ×1

uint32 ×1