我已经看到这个问题了很多但从未见过真正的具体答案.所以我将在这里发布一个,希望能帮助人们理解为什么在使用随机数生成器时会出现"模数偏差",就像rand()在C++中一样.
为什么这样的操作:
std::cout << (-7 % 3) << std::endl;
std::cout << (7 % -3) << std::endl;
Run Code Online (Sandbox Code Playgroud)
给出不同的结果?
-1
1
Run Code Online (Sandbox Code Playgroud) 我很想知道如果我给无符号变量赋一个负值会发生什么.
代码看起来有点像这样.
unsigned int nVal = 0;
nVal = -5;
Run Code Online (Sandbox Code Playgroud)
它没有给我任何编译器错误.当我运行程序时,nVal分配了一个奇怪的值!是否可以将某个2的补码值分配给nVal?
数学:
如果你有这样的等式:
x = 3 mod 7
Run Code Online (Sandbox Code Playgroud)
x可以是...... -4,3,10,17 ......,或更一般地:
x = 3 + k * 7
Run Code Online (Sandbox Code Playgroud)
其中k可以是任何整数.我不知道为数学定义了模运算,但因子环肯定是.
Python:
在Python中,当您使用%正数时,您将始终获得非负值m:
#!/usr/bin/python
# -*- coding: utf-8 -*-
m = 7
for i in xrange(-8, 10 + 1):
print(i % 7)
Run Code Online (Sandbox Code Playgroud)
结果是:
6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3
Run Code Online (Sandbox Code Playgroud)
C++:
#include <iostream>
using namespace std;
int main(){
int m = 7;
for(int i=-8; i …Run Code Online (Sandbox Code Playgroud)