[C++]求模与求余运算

  C++中程序中,求模和求余运算很多时候都会让人弄不清,甚至在有些教材上也会混淆概念,比如在《C++ primer 第五版(中文版)》中,关于其他类型向无符号类型转换时,如果原值大小超出转换后类型的范围时,原书写的是取模后的余数,其实是直接进行取模;再如,C++二级教程中把%称作求余(求模),实际上我们应用%是在求余。

  接下来我们一起来学习下求模与求余运算:

   ①求模与求余运算我们都首先进行求整数商:c=a/b;

   ②然后进行求模或求余运算:r=a-c*b;

  但二者的主要区别在于求整数商上,求模运算整数上会向-∞取整,而求余运算是向0取整。

  例如:

   (1) a=-2,b=3:

   a/b=(-1或0),求模时取整数商-1,然后进行②,得到模1,
   求余时取整数商0,得到余为-2;

   (2) a=3,b=-2:
   a/b=(-2或-1),求模时取整数商-2,得到模-1,
   求余时取整数商-1,得到余1;

   (3) a=-3,b=-2:

   a/b=(1或2),求模时取整与求余时整数商都是1,所以模等于余数,都等于-1;

   (4) a=3,b=2:

   a/b=(1或2),模与余都是1.
  我们来总结以下,当a和b同号时,整数商大于等于0,所以求模与求余的整数商相同,所以进行②以后得到的结果相同。当a和b 异号时,整数商小于等于零,所以求模时取整数商中较小的一个,取余时整数商中较大的一个,如果不能整除,取模与取余的结果不同,模的符号与b相同,而余数的符号会与b相同。
  接下来,我们来看一个求模在C++数据类型转换中的应用:
  当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模。那么:8 比特大小的 unsigned char 可以表示 0 至 255 区间内的值,如果我们赋了一个区间以外的值,例如 -1 ,则实际结果时对 256 取模,即 255 。

你可能感兴趣的:(C++笔记,C++编程基础)