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);
이 인쇄 것입니다 : 나를 위해 (target & ~mask) | (source & mask)
가 올바른 결과 (0x0120abcd), 그러나이 결과는 (여전히 0x0000abcd로 설정되어있는) target
에 다시 할당되지 않은를 제공한다는 것을 의미
0x0000abcd
0x0120abcd
0x0000abcd
합니다. 내가 뭘 잘못하고 있는거야? target
의 형태에서
'target '은 16 비트 유형입니다. –
당신은'unsigned int source, int offset, int bitCount'에 대해서이 값의 체크를 덧붙여 야합니다.'target은 16 비트 타입입니다. '는 주된 실수는 –