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);
}