0

私は 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 に設定されています)。私が間違っていることは何か分かりますか?

4

1 に答える 1

4

の型を見てくださいtarget:

uint16_t target

わずか 16 ビットですが、それより高いビットでマスクしようとします。

于 2013-01-19T05:12:06.133 に答える