강좌 & 팁
글 수 2,412
2013.12.12 16:38:21 (*.52.177.249)
75535
0x11223344 값이 들어 있는 정수 변수가 있습니다. 이중에 상위 word 값을 구하라고 합니다.
이런 문제를 받으시면 어떻게 해결하시나요?
보통은 비트연산자를 사용할 것입니다.
#include <stdio .h>
int main( void)
{
unsigned int n_value = 0x11223344;
printf( "low word=%x, high word=%x\n", n_value & 0xffff, ( n_value & 0xffff0000) >> 16);
}
또는 포인트를 이용하시는 분도 있을 것입니다.
#include <stdio .h>
int main( void)
{
unsigned int n_value = 0x11223344;
unsigned short *p_value;
p_value = ( unsigned short *)&n_value;
printf( "low word=%x, high word=%x\n", *p_value, *( p_value +1));
}
위 방법 모두 옳지만, word 단위로 값을 변경하려면 불편합니다.
그러므로 아래와 같이 struct와 union을 사용하면 많이 편해 집니다.
변수 내용을 분리해야 한다면 포인터보다는 union을 사용하는 것이 편합니다.
#include <stdio .h>
typedef struct {
unsigned short low;
unsigned short high;
} high_low_t;
typedef union {
high_low_t each_word;
unsigned int two_word;
} two_word_t;
int main( void)
{
two_word_t value;
value.two_word = 0x11223344;
printf( "low word=%x, high word=%x\n", value.each_word.low, value.each_word.high);
}

