강좌 & 팁
글 수 2,412
2013.12.12 16:38:21 (*.52.177.249)
42149
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); }