i = (gameTime.TotalGameTime.Milliseconds / n) % 11
这里的模数返回以下数字:{1,2,3,4,5,6,7,8,9,10,0,1,0}但是那些最后的零和一个正在困扰我,因为它应该不应该这样,应该吗?我想要的结果是返回{1,2,3,4,5,6,7,8,9,10,11,0},但事实并非如此。有没有人解释它?我完全不知道是什么导致它,我已经尝试过不同版本的代码,也将11更改为其他内容,但它也没有用。
答案 0 :(得分:1)
不,因为11 % 11
为零。请参阅文档:http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx
答案 1 :(得分:0)
不,% operator在将左操作数除以右操作数时返回余数。换句话说,x % x
总是返回0,因为x
可以被x
完全整除。或者更一般地说,对于整数,n
,m
和x
,(n * x + m) % x == m
如果您想要的值范围为0到11,请使用模12:
i = (gameTime.TotalGameTime.Milliseconds / n) % 12
答案 2 :(得分:0)
你的模数值应该是12而不是11.模数返回除法的余数(更确切地说,m % n
的等式是m - floor(m/n)n
),所以11/11确实会返回0。
然而,12,11 / 12将是11,12/12是0和13/12剩余1。它'包裹'你的value - 1
所以你应该使用它:
i = (gameTime.TotalGameTime.Milliseconds / n) % 12
12的例子:
var b = 10 % 12; //10
var c = 11 % 12; //11
var d = 12 % 12; //0
var e = 13 % 12; //1