54.7 심사문제 질문
, 정 Cel님이 작성int main() { union Data d1; d1.num1 = 0x1111; printf("0x%x %d\n", d1.c1, sizeof(d1)); return 0; }여기서 d1.num1이 2바이트니까 num1이 short 타입 되야하는거 아닌가요?
그래서 union Data안에 {char c1; short num1; int num2;} 사용하지 않는 int변수를 하나 만들어서 크기만 맞추어서 통과했는데,
해설에는 num1이 int라는데 num1이 2비트인데 int가 맞는건가요?
감사합니다!
Re: 54.7 심사문제 질문
, 도장_ 관리자님이 작성예시 데이터가 0x11이니 2비트라고 판단하면 안 됩니다.
main 함수에 있는 코드를 보고 판단하면 됩니다.
sizeof(d1)을 출력한 결과가 4라고 되어 있으니까 4바이트 자료형을 쓰면 됩니다.
d1.c1을 출력했더니 0x11이 출력되는 것을 알 수 있으니 2바이트 자료형을 쓰면 됩니다. 0x는 16진수 표기이니 0x1은 1바이트이고, 8비트입니다. 0x11이면 2바이트이고, 16비트입니다. 2비트는 오해한 것 같습니다.
union을 4바이트 크기로 선언하고, 그 안에 2바이트 자료형을 넣을 수 있는지만 묻는 문제입니다.
Re: 54.7 심사문제 질문
, 정 Cel님이 작성아 제가 위에 2바이트라고 써야되는데 2비트라고 잘못썼네요ㅜㅜ
그럼 0x1111은 4바이트라는 말씀맞나요?
그런데 54.2에는 "0x78 : 앞의 1바이트 값만 출력"이라고 적혀있는데,
항상 숫자2개가 1바이트인거 아닌가요?
0x12345678은 숫자 8개니까 4바이트, 0x5678은 숫자 4개는 2바이트 이런식으로요..!
그래서 num1도 0x1111이니까 2바이트라고 생각했는데 제가 잘못 이해하고있나요??
감사합니다!