正数乘正数后取余为什么结果有负数

本人用线性同余法编写了一个产生0,1之间均匀分布的随机数程序,明明都是正数和正数相乘,但结果却含有负值,始终搞不明白为什么,求指点。谢谢

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
void main()
{   

    FILE*fp;
    fp = fopen("myrandom.txt", "w");
    if (fp != NULL)
    { 
    double n;
    double ex=0;
    double x0;
    cout << "请输入要产生的随机数个数";
    cin >> n;
    cout << "请输入初始种子";
    cin >> x0;
    int x = x0;
    double k = 0;
    for (int i = 0; i < n; i++)
    {
        
        x = (x * 16807) % 2147483647;//进行线性同余的计算
        double m = x / 2147483607.0;
        k = k + m;
        fprintf(fp, "%10.8f ", m);
        cout << endl;
    }
    ex = k / n;
}

img

在某一次运算时x就变为负的了!

img

int x会越界,循环到第三次x*16807会超出int范围