关于对取模和取余的理解

今天在看《C++ Primer》的时候,对书中的一句话不理解:

当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如, 8比特大小的unsigned char 可以表示0 至 255 区间内的值,如果我么赋值给此类型变量一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此,把 -1 赋值为8比特大小的unsigned char 所得的结果是255


经过在网上搜索查询之后,才明白其中的原理。

有时候,也经常把“取模”和“取余”两个概念搞混,于是特地解释一下:

1.求整数商:c=a/b

2.计算模或者余数:r=a-c*b

取模运算在取c的值的时候,是向无穷小的方向舍入的(和我们平时舍入的方向相反);取余运算在取c的值的时候,是向0的方向舍入的。第二步是相同的,但因为第一步所得值不同,取模和取余的结果也就不同了。

比如书中这个例子,-1/256,按照我们正常的计算应该是-(1/256)约等于0,但是在计算机中就是向无穷小的方向舍入,即c=-1,则计算模就为r=(-1) - (-1) * 256 =255


你可能感兴趣的:(C++)