Study/C,C++

memset으로 bool값을 true로 설정해도 될까?

MeditT 2020. 5. 4. 11:10

개요


memset은 1byte 단위로 해당 메모리 값을 초기화 시킨다

 

memset(포인터, 설정할 값, 크기)

: void *memset(void *_Dst, int _Val, size_t _Size);

: 끝나고 값 설정이 끝난 포인터를 반환한다.

 

 

 

memset으로 int나 long 값을 10진수로 설정해줄땐 -1과 0밖에 설정하지 못한다.

물론 다른값을 설정할수도 있지만 그러면 원하는대로 안 들어간다.

 

이렇게만 가능!

int num;
memset(&num,-1, sizeof(num));
memset(&num, 0, sizeof(num));

 

왜냐하면 memset은 1바이트 단위로 값을 넣기 때문이다.

 

0으로 초기화하는 경우를 보자.

1byte는 2진수로 00000000이다. 이걸 int크기인 4바이트로 늘리면 00000000 00000000 00000000 00000000이 된다. 어차피 0밖에 없다. 4바이트로 늘려도 0이다.

 

-1로 초기화하는 경우도 마찬가지다.

-1을 1byte로 표현하면 11111111이다. 이것을 4바이트로 늘리면? 11111111 11111111 11111111 11111111. 어차피 -1이다.

 

하지만 1은? 1byte 00000001을 int형인 4byte로 늘리면? 00000001 00000001 00000001 00000001 이런식으로 될 것이다. 그리고 이 값은 더이상 1이 아니다!

아래 사진처럼 이상한 값이 들어간다.

 

 

 

 

의문


그러면 만약 bool로 설정하면 어떨까?

bool isPrime[10];
memset(isPrime, false, sizeof(isPrime));
memset(isPrime, true, sizeof(isPrime));

 

false는 물론 괜찮을것이다. 왜냐하면 false는 0이기때문에 위 예시에서 int를 0으로 초기화하는 것과 같은 결과가 나온다.

 

true는? 1로 초기화한다.

그런데 bool은 1byte 크기기 때문에 00000001이 더 늘어나지 않는다. 그냥 그대로 true가 저장되기때문에 괜찮다.