2012-05-18 20 views
4

在我的功能,我第一次使用MOD如下:在C中,如何计算无符号长模的模数?

void function(int, int, unsigned int); 

电话:

function(100, 200, get_value() % 1024); 

get_value()将返回一个unsigned int类型,从0x 0变化到0xffffffff。在这种情况下get_value() % 1024可能比1024导致function()运行次数过多大的非常大的数字,所以我改变了它如下:

unsigned int num = get_value() % 1024; 
function(100, 200, num); 

在这种情况下,num是确定的。我用gcc进行编译。

那么这两种方法之间有什么区别,以及C如何计算unsigned long的模量?

+2

'的get_value()%1024'永远不能返回的数字大于'1024'大。它将以'[0,1023]'为界。更一般地说,'a%b'将返回范围为[[0,b - 1]'的数字。 –

+0

问题出在代码中,您没有向我们展示过。你能写一个小型自包含程序来展示问题吗?你怎么知道参数值是什么? –

回答

3

您的原型是用于function,但您致电function1。在这种情况下,function1函数没有原型,因此最后一个参数被认为是int。这就是为什么你没有得到预期的转换。

重命名的原型应该修复它:

void function1(int, int, unsigned int); 
+1

这是错误的,我发布它,而我在我的应用程序中正确使用 – Ezio

+0

@Ezio我在[ideone](http://ideone.com/xRic7)上试过这个,get_value()被声明为返回'unsigned int'。当'get_value'被声明为返回'int'时,我也会得到一个错误。你可以通过用''get_value()&0x3FF'替代'%'来解决这个问题。 – dasblinkenlight

+0

谢谢,你的想法可以工作,但我不确定C计算模数。 – Ezio