API 질문글 벌써 두번째 올림 ㅇㅂㅇ
내가 API를 파고 있는뎀
지금 마우스 입력 배우고 있어
그른데 lParam에 xy좌표가 한번에 나오는거얌..
사실 지금
더 작은 자료형으로 변환하면 비트를 뒤에서부터 읽는다는것도 처음알았거든..
근데 HIWORD가
#define HIWORD(I) ((WORD)(((DWORD)(I) >> 16) & 0xFFFFFF)
이런식으로 정의되있는거얌
근데 FFFFFF이게 바이너리로
111111111111111111111111 이거잖아
그리고 &는 비트 AND 연산자고
근데 시프트 연산자를 쓰면 빈공간은 다 0으로 채워지잖아??
그럼 여기서 & 0xFFFFFF 이부분은 하나마나한거 아님??
뭐가다른거지???
0xFFFF => 16bit. 0xFFFFFF => 32bit
결과 값을 32비트로 맞추기 위해, 연산 결과는 더 큰 자료형에 맞춰진다는 C언어의 성질을 이용한 거.
흠... l을 한번 DWORD로 형변환했으니 그런건 상관없지 않어?? 아님 따로 무슨 이유라도 있는거얌?? 점 어렵네뮤ㅠ
뭔가 착각들 하고 있는데, 0xFFFFFF 는 비트로 굳이 따지면 24비트야. F가 6개 밖에 없잖아. 즉 0x00FFFFFF 라는 뜻이야. 즉 이걸 &비트 연산하면, 한마디로 맨위에 16진수 2자리는 그냥 짤라버린단 얘기. 하위 24비트만 필요하다 이거임.
비트연산할때 잘못하면 버그로 원치않는 값이 시프트 될수 있기 때문에, 자주 사용하는 방법임. 맨위에 부호비트가 괜히 시비(?) 걸 수 있기 때문.