kkw564   2년 전

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


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

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

cubelover   2년 전

memset은 바이트 단위로 배열을 채워주는 함수입니다.

kkw564   2년 전

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

cubelover   2년 전

0 또는 -1 외에 다른 수도 나타낼 수 있습니다. 자세한 것은 다음 문서를 참고하세요. http://www.cplusplus.com/refer...

한글로 된 자료는 빈약해서 영어가 다소 어렵더라도 레퍼런스나 stackoverflow를 참고하는 것이 도움이 됩니다. 구글에 검색하면 다양한 자료가 나오니 참고해보세요.


ntopia   2년 전

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

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

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


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

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

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

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

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

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


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

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

kkw564   2년 전

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

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