define 에 쓰인 | 와 << 8 의미를 모르겠어요.
글쓴이: kknd345 / 작성시간: 금, 2006/07/28 - 12:02오전
#define MAKEWORD(b1,b2) ((WORD)(((BYTE)(b1)) | ((WORD)((BYTE)(b2))) << 8 ))
//////////////////////////
bool Packet:: Dispatch_Msg(char** ppmsg, DWORD* len)
{
if( pack_tail == 0 ) return false;
else
{
*ppmsg = pack_buf;
*len = (DWORD)MAKEWORD(*(*ppmsg+1),*(*ppmsg));
*ppmsg += 2;
return true;
};
};
현재 프로그램짜려는데 도움이 되는 코드를 구했는데 막히는 부분이 있어서 이렇게 질문 올립니다.
define 된 MAKEWORD 부분을 잘 이해를 못 하겠습니다.
| 와 << 8 이부분이 어떻게 해석이 되는지 모르겠습니다.
아시는 분 간략하게나마 설명 좀 해주세요
Forums:
제가 C를 잘 몰라서
제가 C를 잘 몰라서 확실하지는 않지만 bitwise OR와 8bit shift 같습니다.
이름 그대로
두 바이트로 Word를 만들고 있읍니다.
b2가 MSB이고
b1이 LSB로군요.
Word라고 하면 uP의 spec에 따라 다릅니다.
sizeof(int)라고 생각하면 대충 맞습니다.
http://en.wikipedia.org/wiki/Word_size#Table_of_word_sizes
하지만 인텔(MS)에서는 8086시절(16bit)에 쓰던 Word가 굳어져
32bit, 64bit Machine에서도 그대로 2byte를 가리키는 말로
쓰고 있읍니다.
Sun에서는 인텔하고는 다르게 부르더군요.
___________________________________
Less is More (Robert Browning)
___________________________________
Less is More (Robert Browning)
Word는
워드는
버스에서 한번에 전송가능한 데이터의 크기,
또, CPU의 산술 연산 장치가 한번에 처리 가능한 데이터의 크기
라고 알고 있는데요..
그렇다면, 워드라는것은 컴퓨터 구조마다 다 다르게 불리는게 맞는거 아니예요?
같은 인텔의 CPU에서도 32비트 머신에서라면 워드는 4바이트라고 해야되고,
64비트 머신에서라면 8바이트라고 해야 맞다고 생각하는데..
아닌가요???
관습적인 word크기
물론 잠수오리네님 말씀이 이론적으로는 맞기는 한데,
관습적으로 많이 쓰이는 표현으로써의 word는 16bit입니다.
dword는 32bit이고요.
딱히 모든 코드에서 100% 다 같은 크기로 정의 됬다고는 할 수는 없습니다.
아마도 본격적으로 pc프로그래밍이 시작된 16bit 머신들의 잔재 인듯.
댓글 달기