2014-02-05 178 views
7

我有這樣的代碼:隨機數:0或1

srand(time(NULL)); 
int n = rand() % 1 + 0; 
printf("%d\n", n); 

但是,如果我把它(不srand(time(NULL)))在例如一個循環,它僅產生0 序列有0和1之間的隨機數的另一個實現,或者我忘記了什麼?

+5

蘭特()%1始終爲0,因爲什麼蘭特回報始終是整除1 –

+0

的方式+ 0總是添加0,因此在這裏沒有任何影響。 –

回答

17

如果你的意思是0 1,您%有一定道理,但你的意思是% 2(或& 1)。當然,+ 0仍然是毫無意義的,不知道你在那裏瞄準什麼。對於0或1的整數結果,只是做:

const randomBit = rand() % 2; 

編譯器可能會"strength-reduce",爲:

const randomBit = rand() & 1; 

此外,還要確保你只在你的程序,或者致電srand()一次不會有你期望的效果。

+0

不,我不想浮動值,我只想要0或1! –

1
int n = rand() % 1 + 0; 

會產生0總是作爲rand() % 1給出0rand()%a0之間產生數a-1)。

+0

是srand(time(NULL));是在循環之外,我指的是另外兩條指令。 –

9

如果你想爲0或1,只是做

int n = rand() % 2 

如果什麼蘭特回報甚至你會得到一個0,如果它是奇怪的,你會在這裏得到一個1。

0
srand(time(0)); //Randomize seed initialization 
for (int rows = 0; rows < n; rows++) { 
int randNum = rand() % 2; 
}