kkw564   7년 전

    // memset(DP, INT_MAX, sizeof(DP));
fill(DP, DP + n, INT_MAX);


이 두코드가 있는데 왜 memset로는 결과값이 -1(예제 입력시)로 뜨고

fill로는 정상적으로 값이 나올까요??..

kkw564   7년 전

그러면 0또는 -1만 가능한건가요? 다른 값은 불가능 한가요? memset에 대해 좀 더 찾아보고싶은데 마땅히 잘 나와있는곳이 없네요 ㅠㅠ

ntopia   7년 전

아주 간단하게 대충 설명해보면

"int값을 16진수로 나타냈을 때 동일한 바이트 패턴이 4번 반복되는 값" 으로 초기화하고 싶은 상황이면

그 바이트 패턴을 memset에 넣어서 사용할 수 있습니다.


-1을 예로 들어 설명해보면

음수를 표현할 때 2의 보수를 사용하는 플랫폼 (= 거의 대부분의 플랫폼) 에서는

(int)-1 을 0xffffffff  로 나타냅니다.

memset에 (int)-1 을 넣으면 함수 내부에서 unsigned char로 변환하고 그 때의 값은 0xff 가 되고

이 값으로 모든 바이트를 채우게 됩니다.

따라서 어느 위치에서 읽어도 (int)-1 이 되는 것이죠.


비슷하게 memset에 0x0f 를 넣으면

0x0f0f0f0f  같은 값으로 초기화 되겠죠.

kkw564   7년 전

두분다 감사합니다 도움많이됐습니다 !

댓글을 작성하려면 로그인해야 합니다.