首页
社区
课程
招聘
[讨论]浅析VC++6.0对整数除以常量的处理
发表于: 2010-7-18 00:39 26431

[讨论]浅析VC++6.0对整数除以常量的处理

2010-7-18 00:39
26431
收藏
免费 7
支持
分享
最新回复 (50)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
26
正好相反,跟C语言没啥关联,完全是VC的实现。
2010-7-27 13:15
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
27
7月28日更新
2010-7-28 18:52
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
28
8月2日更新
2010-8-2 15:45
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
29
貌似LZ顶楼的解释无法说明-8%3=-2。

也可以(模仿一下LZ的口吻)将我们的代码段3代入定义和运算性质得:
q = (a – r) / b = (-8 - r) / 3 =  -3
r = a - q*b = -8 – (-3 * 3) = 1

为什么余数不是1,没有解释清楚……
2010-8-2 17:51
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
q= (a – r) / b = (8 - r) / (-3)
r = a - q*b = 8 – (q * -3)  

这两个等式是等价的啊,也就是说从数学看你无法从这两个等式推算出q和r的值。
另外,关于模除的结果,这个应该是依据C99的定义的吧
2010-8-3 14:41
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
31
C语法取模的结果是要满足r = a - q*b,在计算过程中被除数a,和除数b都是已知的,所以带入可以理解余数符号的来由
2010-8-3 15:49
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
32
这位给出的取模方案也满足余数和除法的性质,在aaaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8Z5k6i4y4G2L8s2k6W2M7W2)9J5k6h3W2@1i4K6u0r3e0h3q4F1N6h3q4D9K9g2)9J5c8V1k6S2j5%4c8G2N6s2g2E0i4K6u0r3M7$3!0#2M7X3y4W2i4K6u0r3x3o6f1^5i4K6u0W2K9s2c8E0这里对其有论述:

              truncating    modulus      floor
7÷3       =    2 rem 1      2 rem 1      2 rem 1
(-7)÷3    =   -2 rem -1    -3 rem 2     -3 rem 2
7÷(-3)    =   -2 rem 1     -2 rem 1     -3 rem -2
(-7)÷(-3) =    2 rem -1     3 rem 2      2 rem -1

有的语言就是把除法定位为modulus方式,比如python。
C语言除法规则是向0取整,也就是truncating方式的除法,因此,取模方式也只能按着这个方向来。

先计算q = -8 / 3=-2,
r = a - q*b = -8 – (-2 * 3) = -2
2010-8-3 15:52
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
33
感谢大家参与讨论。指出问题是好事情,我脸皮厚,大家言辞激烈也没关系。
2010-8-3 16:27
0
雪    币: 260
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
34
酷!学习了。。。
2010-8-5 11:49
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
35
8月5日更新
2010-8-5 17:16
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
36
加上这段解释就完整了,辛苦LZ了
2010-8-6 14:58
0
雪    币: 271
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
学习123456789
2010-8-6 17:49
0
雪    币: 247
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
学习了,非常不错,如果可以,可以发个培训的具体涉及内容步骤么
2010-8-6 22:40
0
雪    币: 883
活跃值: (314)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
39
这需要顶,很好很强大
2010-8-6 23:11
0
雪    币: 2322
活跃值: (573)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
40
无法学习,只能顶贴
2010-8-6 23:12
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
41
8月9日更新
2010-8-9 17:36
0
雪    币: 708
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
学习学习~~
2010-8-9 23:48
0
雪    币: 52
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
恩 分析得很好

另外可以参考 Hacker's Delight 这本书,上面有一章讲这个问题。

LZ第一个文章那么解释确实有点问题,应该上来就说C99标准里说了除法遵循的是向零取整就行了。
说的那些个条件并不能唯一确定商和余数。
2010-8-21 01:26
0
雪    币: 95
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
44
确实是有这个问题,当时应该先写3楼的内容,强调C语言对除法方式的约定,然后再写1楼的内容。谢谢啊。

另外还有个奇怪的问题,我google了一下你推荐的《Hacker's Delight 》,发现2feK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8Z5k6i4y4G2L8s2k6W2M7W2)9J5k6h3W2@1i4K6u0r3e0h3q4F1N6h3q4D9K9g2)9J5c8V1k6S2j5%4c8G2N6s2g2E0i4K6u0r3M7$3!0#2M7X3y4W2i4K6u0r3x3o6l9I4i4K6u0W2K9s2c8E0这里的内容居然很多都和《Hacker's Delight 》相似,这是在3楼我列出的参考资料之一。
2010-8-27 01:00
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
45
这个头像太Cool了 膜拜+学习下  
2010-9-15 17:31
0
雪    币: 276
活跃值: (183)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
46
膜拜一次。收藏资料
2010-9-18 16:27
0
雪    币: 314
活跃值: (271)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
47
支持支持
2010-12-17 01:24
0
雪    币: 314
活跃值: (271)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
48
收藏,收藏1
2010-12-17 01:26
0
雪    币: 60
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
你们班的都来了
2010-12-17 08:13
0
雪    币: 56
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
这是哪位同学,科锐的课程爆出来了。
2010-12-17 10:07
0
游客
登录 | 注册 方可回帖
返回