비트연산자에 관한 질문입니다.

kyum의 이미지

안녕하세요.
제가 2byte에 각각 3bit, 4bit, 9bit를 넣으려고 합니다.

3bit를 넣고서 4bit를 저장하려고 하는데

data[2] = (char)(number << 3);

로 하면 안되더라구요. 제가 잘 못한거니 안되는 거겠지만..

어떻해야할지.. 잘 몰라서요. 제 머리의 한계는 저거라서요.

너무 초보적인 질문을 드렸다구 구박하지 말아주세요. ㅠ.ㅠ

익명 사용자의 이미지

data[0]과 data[1] 에 넣고 싶으신 거 아닌가요?
data[2]는 세번째 바이트인듯?

SoftOn의 이미지

bit 연산자를 제대로 이해를 하지 못하는 관계로 전 편법으로 구조체로 해결합니다.
2바이트 구조체이 3bit, 4bit, 9bit 크기로 만들었습니다.. ^^;

struct _TWOBYTE {
    char three:3;
    char four:4;
    short nine:9;
};
익명 사용자의 이미지

data |= (number&1111b)<<3;

정태영의 이미지

Anonymous wrote:
data |= (number&1111b)<<3;

대부분의 컴파일러에서 2진수는 지원하지 않습니다..
(number&0x7) 로 해야합니다..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

익명 사용자의 이미지

E1 << E2 는 E1, E2가 양수일 때 E1 * (2^E2) 와 동일합니다.

비트 연산자를 다룰 때는 무부호 정수unsigned integer형으로 하는 것이 좋습니다.

unsigned int i = ((((unsigned)three << 4) | four) << 9) | nine;