|
97나오는게 맞습니다..
temp3의 공용체는 4byte크기의 메모리 영역을 가지고 있습니다.
처음에 test1.x = 1로 하셨을때 4byte의 영역에 1이라는값이 들어가겠지요
이 1이라는 값은 temp1, temp2도 같이 공유합니다.
다음에 test1.y.byte0 = 'a'를 넣으셨지여 이게 hexa값으로 0x61입니다.
이값은 이전의 1을 덮어써버리게 됩니다..
다음에 1을 넣으셨는데 이값은 0x01입니다. 1bit만 처리하는거지여(비트필드 구조체)..
따라서 0x61(1byte)이라는 값중에서 1bit값만 변하게 되는거지여..
그런데 뒤에값이 같은 1이라서 그대로 61이 되는거지여.
이해가 되셨는지 모르겠네여..^^;
shivan2k 님이 쓰신 글 :
: #include<stdio.h>
:
: typedef struct w_byte
: {
: unsigned byte0: 8;
: unsigned byte1: 8;
: unsigned byte2: 8;
: } temp1;
:
: typedef struct flag
: {
: unsigned bit_a: 1;
: unsigned bit_b: 1;
: unsigned bit_c: 1;
: } temp2;
:
: typedef union word
: {
: int x;
: temp1 y;
: temp2 z;
: } temp3;
:
: void main()
: {
: temp3 test1;
: test1.x=1;
: test1.y.byte0='a';
: test1.z.bit_a=1;
: printf("test1.x =%d\n",test1.x);
: printf("test1.y.byte0 =%d\n",test1.y.byte0);
: printf("test1.bit_a =%d\n",test1.z.bit_a);
: }
:
: 다 알려달라고 해서 답변이 없는거 같아서요...
: typedef 는 그냥 데이터형 정의 하는것이죠...
: unsigned 은 음수가 않나오게 하는것이고
:
: union 은 공유체로 기억장소를 공유(?) 덮어쓰기같은거(?) 나중값을 기억...(?맞나요?)
:
: temp3 에서 int x; temp1 y; temp2 z; 라고 정했는데 거기 부분이 공유체가 사용된곳이니깐
: test1.x=1
: a 가 아스키코드 10진(?) 이게 97 이죠...???
:
:
: 결과는 97,97,1 이라고 나오는데
:
: test1.x 가 왜 97이 나오죠??? 그럼 아스키 값이 아니라는것같은데 --;...
:
: 조금만 알려주세여
|