C语言处理除法和取余操作过程
2013-07-31 17:06
239 查看
众所周知,C语言编译器对于除法和取余过程和现实生活中的有差异,例如 3/(-2) = -1, 但是3%(-2) = 1,这是为什么呢?
我们都知道在做除法的时候例如让a除以b,商为q,余数为r,那么这个应该满足以下三个条件:
1、q*b + r = a
2、如果改变了a的正负号,也同时希望改变q的正负号,但是q的绝对值不变化
3、当b>0时,我们希望r>=0 且 r < b
这是小学数学上我们学习到的知识,但是很不幸的是,在做除法运算的时候上面的三个性质有可能不是全部都成立,比如3/2和(-3)/2对比商和余数,即可发现上面三个性质的矛盾所在,对于C语言编译器对于整数除法采用了截断运算,必然要放弃上面三条性质中的一条,大多数语言放弃了第三条,而是改作了余数和除数的符号相同。这样来满足性质一和性质二,至少C语言编译器都是这么做的!
如有错误,欢迎指正!
我们都知道在做除法的时候例如让a除以b,商为q,余数为r,那么这个应该满足以下三个条件:
1、q*b + r = a
2、如果改变了a的正负号,也同时希望改变q的正负号,但是q的绝对值不变化
3、当b>0时,我们希望r>=0 且 r < b
这是小学数学上我们学习到的知识,但是很不幸的是,在做除法运算的时候上面的三个性质有可能不是全部都成立,比如3/2和(-3)/2对比商和余数,即可发现上面三个性质的矛盾所在,对于C语言编译器对于整数除法采用了截断运算,必然要放弃上面三条性质中的一条,大多数语言放弃了第三条,而是改作了余数和除数的符号相同。这样来满足性质一和性质二,至少C语言编译器都是这么做的!
如有错误,欢迎指正!
相关文章推荐
- C语言处理图像基本操作1400(读入、拷贝、写出图像及彩色图转灰度图)
- 用于在存储过程中 根据@@error 判断是否要提交事务和提示操作是否成功,便于异常处理
- Win32 窗口过程对于WM_KEYDOWN按键操作的简单处理
- [转]: ASP.NET对请求处理过程的操作与分析
- 在存储过程中使用事务处理 sql server 删除多表操作一致性的问题
- C语言 文件操作7--文件错误处理
- gcc编译过程、C语言编译过程分析、环境变量设置、linux文件夹结构和用途介绍、常用文件和目录的操作命令、文件类型
- 一次shutdown操作无法正常执行的处理过程
- 【C语言】【unix c】信号从产生到处理的全过程(以2号信号为例)
- leetcode——Divide Two Integers 不用乘除取余操作求除法(AC)
- c语言可变参数函数--编译器内部处理过程
- 用户空间发送flow,packet操作告知内核处理过程
- C语言对文件的读写操作以及处理CSV文件的方法
- atitit.面向过程的编程语言异常处理 c语言 asp vbs 的try catch 实现
- 用C语言对txt文件进行读写处理的过程
- 哈希查找中的除法取余时负数处理
- C语言中对字符串的操作处理
- C语言中关于除法和取余的理解
- C语言嵌入式系统编程修炼(屏幕操作) 汉字处理
- atitit.面向过程的编程语言异常处理 c语言 asp vbs 的try catch 实现