操作未赋值给变量的结果

Result of operation not being assigned to variable?

本文关键字:结果 变量 赋值 操作      更新时间:2023-10-16

我在c++中有一个奇怪的问题,我肯定我错过了一些明显的东西,但不能弄清楚是什么

函数的作用是设置变量的一些位。从我的测试,这一切似乎都工作,但它看起来像操作的结果没有分配回变量。

uint16_t setBits(uint16_t target, unsigned int source, int offset, int bitCount) {
    unsigned int mask = ~0;
    mask = mask >> ((sizeof(mask) * 8) - bitCount);
    int rightShift = (sizeof(mask) * 8 - bitCount - offset);
    mask = mask << rightShift;
    source = source << rightShift;
    printHex(target);
    printHex((target & ~mask) | (source & mask));
    target = (target & ~mask) | (source & mask);
    printHex(target);
    return target;
}
uint16_t group;
group = 0xabcd;
unsigned int source = 0x12;
group = setBits(group, source, 4, 8);

这将打印:

0x0000abcd
0x0120abcd
0x0000abcd

这对我来说意味着(target & ~mask) | (source & mask)给出了正确的结果(0x0120abcd),但是这个结果没有分配回target(仍然设置为0x0000abcd)。知道我哪里做错了吗?

target的类型:

uint16_t target

它只有16位,但是你试图用比16位更大的位掩码

相关文章: