Union
저가 가지고 있는 책에서
#include
union ch_int {
char ch;
int in;
}a;
void main()
{
a.in = 0xbc37;
printf(" ch = %x, in = %x", a.ch, a.in);
}
결과 ch = 37 in = bc37
이라고 나온다고 하더군요 그리고 결과도 그렇게 나왔습니다.
그런데 그 책에서 a의 첫 바이트에 37이 들어가고 두번째 바이트에 bc가
들어간다고 하더군요.
char 형 ch가 union변수 a의 시작 번지에서 1바이트를 읽어 오려면 int
형 in의 값의 바이트가 반대로 들어가면 괜찮겠다는 생각을 했지만...
아래와 갔이 출력값을 보니깐 뭐가 뭔지 모르겠습니다.
el님의 하드웨어강좌에서 뺏긴 함수를 사용했습니다.
#include
union ch_int {
char ch;
int in;
}a;
void binary_prn(int x)
{
int i = sizeof(x)*8;
int bit_mask = 0x40000000;
if(x & 0x80000000 )
printf("1");
else
printf("0");
for( int count = 2; count < i + 1; count ++)
{
if( x & bit_mask )
printf("1");
else
printf("0");
bit_mask >>= 1;
if(!(count%4))
printf(" ");
}
}
void main()
{
a.in = 0xbc37;
binary_prn(a.in);
}
비트값을 출력해보니 그냥 순서대로 값이 들어가 있더군요.
제일 궁금한점은?
메모리에 바이트단위 or 워드단위를 기준으로 역순으로 저장되는 것도있
습니까??
처음 하드웨어 다루는거 공부하니깐....
정말 어렵네요~~`
고수님의 많은 조언 부탁드립니다.
..
Re: Union
little endian, big endian으로 검색해 보세요..
http//www.google.com/search?hl=ko&q=little+big+endian&lr=
http//www.webopedia.com/TERM/b/big_endian.html
전용태 wrote..
제일 궁금한점은?
메모리에 바이트단위 or 워드단위를 기준으로 역순으로 저장되는 것도있
습니까??
젤 처음의 예가 (바이트 단위)역순으로 저장된 걸 보여주는 예입니다.
댓글 달기