1 ( ) [ ] -> .
왼쪽 우선
2 ! ~ ++ -- + -(부호) *(포인터) & sizeof 캐스트
오른쪽 우선
3 *(곱셈) / %
왼쪽 우선
4 + -(덧셈, 뺄셈)
왼쪽 우선
5 << >>
왼쪽 우선
6 < <= > >=
왼쪽 우선
7 == !=
왼쪽 우선
8 &
왼쪽 우선
9 ^
왼쪽 우선
10 |
왼쪽 우선
11 &&
왼쪽 우선
12
||
왼쪽 우선
13
? :
오른쪽 우선
14
= 복합대입
오른쪽 우선
15
,
왼쪽 우선

(6)최대 혹은 최소값 구할 때 초기값 설정
int a;
a = 0x7FFFFFFF; // 가장 큰 수로 보초(sentinel)를 세울 때
int a;
a = 0x80000000; // 가장 작은 수로 보초(sentinel)를 세울 때

rand()%n을 사용하여 난수의 범위를 설정하면, 대부분의 난수 발생기에서 low-order 비트들이 random하지 않으므로,
난수의 분포가 이상적인 일양분포(uniform distribution)를 이루지 않습니다.

예를들어 난수의 범위를 0부터 10까지 지정했을 때 무수히 많은 시행을 한다면 0부터 10까지 각각 해당하는 숫자에 맞는 확률이 비슷하게 나와야 진정한 난수라고 볼 수 있습니다.
그래서 C Programming FAQs에서는 다음과 같은 방법을 권고하고 있습니다.

(int)((double)rand() / ((double)RAND_MAX + 1) * n)
또는,
rand() / (RAND_MAX / n + 1)

'C > C' 카테고리의 다른 글

포인터는 왜 어려울까?  (0) 2011.11.03
헤더 파일의 중복 정의 막기  (0) 2011.10.28
C언어 - 긴 문자열 초기화  (0) 2011.10.28
c/c++ 2차원(이차원) 배열 동적할당 방법2  (0) 2011.10.23

설정

트랙백

댓글