|
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이 나오죠??? 그럼 아스키 값이 아니라는것같은데 --;...
:
: 조금만 알려주세여
안녕하세요 만해입니다.
temp3 에 들어가 있는 자료형이 int , 3Byte , 3bit 이렇게 되네요
컴파일러에 따라 틀리지만 32비트 컴파일러로 가정후 애기 드리면
32비트 컴파일러는 4바이트의 공간을 가집니다.
그에 비해 다른 자료형은 3Byte나 3bit 4바이트의 자료형 전체를 가지기엔 모자라죠
제가 알기론 4바이트 공간에서 그것보다 작은 자료형이 공유체에 있을경우 LSB에서부터
몇 바이트 가지는걸로 알고 있는데요
정확히는 모르겠어요
여튼 자료형 정의가 약간 이상하다는 정도
참고로 제가 만든 자료형에 올려 드립니다.
참고 하세요
typedef struct _U_Byte
{
int A:1;
int B:1;
int C:1;
int D:1;
int E:1;
int F:1;
int G:1;
int H:1;
} U_Byte;
typedef struct _U_WORD
{
U_Byte HByte;
U_Byte LByte;
} U_Word;
typedef struct _U_DWORD
{
U_Word HWord;
U_Word LWord;
}U_DWord;
typedef union _UD_DWORD
{
U_DWord dword;
int Number;
}UD_DWord;
|