我在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'具有16位類型。 –
你應該爲這個值添加一個檢查,也是'unsigned int source,int offset,int bitCount',其中'target是一個16位的類型'看起來主要的錯誤 –