之前看帖子,发现许多时候基本上大家都把求模和求余混为一谈了。但实际上二者的概念是有区别的
1. 求余
在C语言中,求余对应的操作符是%,且a%b求余的最后结果总是与a符号相同,最后的数值为|a|%|b|。
故而 12%256=12;
-12%256=-12;
-12%-256 = –12;
12%-256 =12;
2. 求模
在C语言中,对求模操作没有专门对应的运算符,一般用mod代替。且根据网上查阅资料,一般认为求模运算a mod b中,b必须大于0,且求模的结果必须是正数或者0. 个人对这块的理解可能也不是很深刻,我是根据《C++ premier》第三版中文版32页的论述来推断的,该页有如下申明:
336 mod 256 =80;
-1 mod 256 =255;
故而求模运算应该是:
(1)当a 为正数时,求模的结果与求余完全一致;
(2)当a 为负数时,求模的结果始终为正数,结果为(a+X*b)%b,其中 a+X*b>=0.