if (temp != 0) {
temp = temp << 15;
temp += (int)rand();
}
이 주석부분에서 random 데이터가 2^15개가 아니라 2^30개가 나오는지 잘 모르겠습니다
그리고 이 파일로 생성된 랜덤데이터를 제공해주신 버블정렬할 경우
총 size 32의 배열이 생성되는데 왜 그런건가요??
2018.11.03 16:40
2018.11.03 16:48
그러면 #define N 1<<17 로 변경했을 때
temp = temp <<20정도로 하면 문제가 발생하지 않는다는 말씀인가요?
2018.11.03 16:52
1<<?? 에서 ??가 15를 넘어갈 때 주석을 해제해 주시면 되는데 temp << 15는 그대로 유지해주시는게 좋습니다.
20을 하게되면 최대 2^15에서 20칸을 옮기기 때문에 2^35가 되어 int형 범위를 넘어갑니다.
따라서 temp<<15이부분은 변경 안하시는게 좋습니다.
그냥 1<< ?? 이부분만 적당히 변경해서 적당한 size의 데이터들을 가지고 실험하시면 되겠습니다.
2018.11.03 16:55
네 감사합니다!
맨 위에 정의된 #define N 1<<5 이부분을 변경해주시면 배열의 Size가 변경됩니다. 1<<5는 0000 ... 0001 을 Left shift 해서 0000 .... 1 0000 을 만들어 32가 된다고 생각하시면 됩니다.
질문하신 코드의 경우는 RAND_MAX가 0x7fff ( 0 ~ 2^15 -1 )이기 때문에 데이터의 갯수가 2^15를 넘어갈 경우에 중복되는 숫자가 너무 많이 생겨 해당 부분을 주석 해체 하시고 데이터를 만드시면 된다는 뜻입니다.
감사합니다.