Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988423
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

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)都是正确的

阅读(5403) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~