srand man
говорит, что srand
имеет параметр unsignd int, но при использовании без приведения компиляция не жалуется. Есть ли шанс пойти не так, если вы не используете cast с (unsigned int)
? Или не имеет значения, потому что компилятор всегда будет неявно преобразовывать?
В качестве примера код ниже:
#include<stdio.h>
#include<stdlib.h>
int
main(void)
{
int num, x;
x = -2;
srand(x);
num = rand() % 100000;
printf("%d\n", num);
return 0;
}
Печать этого кода:
32
Я предполагаю, что компилятор неявно преобразует переменную x типа int
в unsigned int
. Что происходит при этом преобразовании? Что, если преобразование преобразует переменную (имеющую тип int
) в unsigned int
, которая является тем же значением, что и другое число, которое после создания начального числа будет идентичным. Другими словами:
int x = -2;
int y = 546; // the number 546 is just an example !
int num_x = srand(-2);
int num_y = srand(546);
И, за кулисами, num_x
равно num_y
.
Это сомнение появилось, когда у меня был отрицательный параметр на моем srand, и я сомневался, будет ли этот сид уникальным. Я думаю, что нет, потому что для примера код ниже:
#include<stdio.h>
#include<stdlib.h>
int
main(void)
{
int t, num;
t = -6;
printf("%u\n", t); // prints the variable t as unsigned (implicitly converted)
srand(t);
num = rand() % 100000;
printf("Random number: %d\n", num);
srand(4294967290); // the number 4294967290 is how the int number -6 looks like when converted in unsigned int
num = rand() % 100000;
printf("New random number: %d\n", num);
return 0;
}
Результат:
4294967290
Random number: 19
New random number: 19
Итак, всегда отрицательные числа после преобразования будут вести себя так? Как мне позаботиться об этом?