2014-11-21 3 views
0

사람이 제대로arc4random() 양수 및 음수

arc4random() %#; 

뿐만 아니라 양수하지만 음수도를 포함하도록 작성하는 방법을 말해 줄래? 2D 환경에서 임의의 방향으로 무작위로 움직일 수있는 이미지 (Sprite Kit의 SKSpriteNode)를 갖기 위해 노력하고 있습니다.

+0

당신이 날 문제를 해결하는 방법을 이해하는 데 도움이되지 않았다 제공하는 예입니다. 내 문제에 대해 글을 쓸 때 링크를 제공 했어야했기 때문에 다른 사람들도 문제를 발견했지만 귀중하다는 것을 알 수 없었습니다. – Krekin

답변

3

arc4random() 반환 유형은 u_int32_t이며 unsigned int이므로 직접 음수를 반환 할 수 없습니다.
양수 또는 음수 범위를 받으려면 '조작'해야합니다.

우선, arc4random() % 대신 arc4random_uniform()을 사용하고 싶습니다. 상한이 2의 거듭 제곱이 아닌 경우 "모듈로 바이어스"가 발생하지 않기 때문입니다.

질문에 대해서는 원하는 범위를 빼서 다음을 수행 할 수 있습니다.

arc4random_uniform(100); 

는 0에서 99 사이의
을 값을 줄 것이다 그러나이 같은 50을 빼서 : 예를 들어

arc4random_uniform(100) - 50; 

우리는 지금 -50과 49 사이의 임의의 값을 얻을 것이다;

EDIT- 변수에 결과를 할당하면 컴파일러 경고를 피하기 위해 arc4random_uniform 결과를 입력해야한다고 생각합니다. 필요한 경우 확실하지는 않습니다.
그래서 그 결과는 다음과 같습니다

int randomNumber = (int)arc4random_uniform(100) - 50; 
1

양수뿐만 아니라 음수도 포함 하시겠습니까?

수 없습니다. arc4random()은 부호없는 값 (u_int32_t)을 반환합니다.

당신은 수 있습니까? 그러나 범위의 절반을 뺀 값의 범위를 이동합니다. 당신이 일반적으로 같은 것을 할 줄 경우 즉, : 범위 [0, 20)의 값을 얻을 수

int x = arc4random() % 20; 

를 대신 말할 수 :

int x = (arc4random() % 20) - 10; 

의 범위 [-10, 10)의 값을 얻을 수 있습니다.

+0

안녕 친구, 좋은 대답, 나는 당신이 게시하기 전에 내 대답을 게시하기 시작했습니다. 그래서 나는 대답을 '훔치려 고'하려고하지 마십시오. 어쨌든, 당신의 예를 바로 수정하십시오. 첫 번째 예제는 0에서 19 사이의 값을 반환하고 두 번째 예제는 -10에서 9 사이의 값을 반환합니다. – AMI289

+0

@ AMI289 범위가'[0, 20]입니다. 동의하지 않습니다. 단순함을 위해서 니트. * 사이의 *라는 단어는 본질적으로 그것이 포함되는지 또는 제외되는지에 대해 모호합니다 (http : //english.stackexchange.co.kr/a/118403/7225) 경계를 명시해야하므로 위의 내용을 명시 적으로 명시하도록 편집합니다. – Caleb

+0

상한값이 2의 거듭 제곱이 아닌 경우 modulo 바이어스를 피하려면 arc4random_uniform을 사용해야합니다. – 0x141E

관련 문제