2012年(158)
分类: C/C++
2012-11-26 16:07:24
对于正整数(包括无符号类型,和值为正的有符号类型),毫无疑问。对于负整数,随便举个例子
-5/2 = -2; -5>>1 =
-3;
看起来不等
现在单说“除”
在 C99 和 C++0x 之前,只保证 商*除数+余数==被除数,如果希望商向零靠近取整,应当使用div函数。
即
(-13)/4 的结果可能是 -3余-1,也可能是 -4余3。
C99和C++0x规定,商向零靠近取整,即:
(-13)/4 结果是
-3余-1
13/(-4) 结果是 -3余+1
(-13)/(-4)结果是 +3余-1
回正题,看来
-5/2 是 商为 -2 余 -1,即商向零靠近取整
-5>>1 是 商为 -3 余
+1,即以取小原则取整
同样,-11%16等于-11(即商1余-11),而-11&15等于5(即商-1余5)都是正确的