3
하나의 32 비트 정수에 4 개의 값을 인코딩하는 클래스를 만들려고합니다. 지금까지는 아무것도 잃지 않고 모든 값을 저장하고 출력하지만 어떤 이유로 든 잘못된 순서로 출력합니다. 나는 연습으로이 일을하고,이 프로그램은 실제 프로그램에서 사용하지 않을32 비트 정수에서 4 개의 값을 인코딩하는 중
struct encoder {
uint32_t val;
encoder(uint32_t _val = 0) : val(_val) {}
uint32_t first(uint32_t v = 0) {
if (!v) return (val << (8*3)) >> (8*3);
val |= v;
}
uint32_t second(uint32_t v = 0) {
if (!v) return (val << (8*2)) >> (8*3);
encoder _backupval(val);
val = (val >> (8*1));
val |= v;
val = (val << (8*1));
val |= _backupval.first();
}
uint32_t third(uint32_t v = 0) {
if (!v) return (val << (8*1)) >> (8*3);
encoder _backupval(val);
val = (val >> (8*2));
val |= v;
//now restore
val = val << 8;
val |= _backupval.second();
val = val << 8;
val |= _backupval.first();
}
uint32_t fourth(uint32_t v = 0) {
if (!v) return (val << (8*0)) >> (8*3);
encoder _backupval(val);
val = (val >> (8*3));
val |= v;
//now restore
val = val << 8;
val |= _backupval.second();
val = val << 8;
val |= _backupval.first();
val = val << 8;
val |= _backupval.third();
}
};
int main() {
encoder t;
t.first(6);
t.second(42);
t.third(212);
t.fourth(23);
cout << "first number: " << t.first()
<< "\nsecond number: " << t.second()
<< "\nthird number: " << t.third()
<< "\nfourth number: " << t.fourth() << endl;
}
참고. 따라서 대체 방법을 제안하지 말고 결함을 지적하지 마십시오 (숫자의 크기가 256보다 크면 다른 정수 등을 손상시킬 수 있습니다)
를 첫 번째() 두 번째 오버로드 않은 경우() ...? –
디버깅 해 보셨습니까? 그것은 디버거가 처리 할 수있는 매우 간단한 문제처럼 보입니다. –
또한 많은 return 문이 누락되었습니다. 추가 컴파일러 경고 활성화 – Zeta