假定我们让 a 除以 b,商为 q,余数为 r: q = a / b;

r = a % b;

这里,不妨假定 b 大于 0。

我们希望 a、b、q、r 之间维持怎样的关系呢?

1.最重的一点,我们希望 q * b + r == a,因为这是定义余数的关系。

2.如果我们改变 a 的正负号,我们希望这会改变 q 的符号,但这不会改变 q  的绝对值。

3.当 b>0 时,我们希望保证 r >= 0 且 r < b。例如,如果余数用于哈希表的索引,确保 它是一个有效的索引值很重 。

这三条性质是我们认为整数除法和余数操作所应该具备的。很不幸的是,它们不可能同时成立。

考虑一个简单的例子:3/2,商为 1,余数也为 1。此时,第 1 条性质得到了满足。(-3)/2 的值应该是多少呢?如果 满足第 2 条性质,答案应该是-1,但如果是这样,余数就必定是-1,这样第 3 条性质就无法满足了。如果我们首先满足第 3 条性质,即余数是 1,这种情况下根据第 1 条性质则商是-2,那么第 2 条性质又无法满足了。

因此,C 语言或者其他语言在实现整数除法截断运算时,必须放弃上述三条原则中的至 少一条。大多数程序设计语言选择了放弃第 3 条,而改为 求余数与被除数的正负号相同。 这样,性质 1 和性质 2 就可以得到满足。大多数 C 编译器在实践中也都是这样做的。

然而,C 语言的定义只保证了性质 1,以及当 a>=0 且 b>0 时,保证|r| < |b|以及 r>=0。 后面部分的保证与性质 2 或者性质 3 比较起来,限制性 弱得多。

C 语言的定义虽然有时候会带来不需 的灵活性,但大多数时候,只要编程者清楚地知道要做什么、该做什么,这个定义对让整数除法运算满足其需要来说还是够用了的。例如,

c语言余一个负数_C语言负数的除法和求余运算相关推荐

  1. c语言中如何区分取模和除法,除法、求余和取模的区别

    一.除法运算符"/" 二元运算符,具有左结合性.参与运算的量均为 整型时,结果为整型,舍去小数.如果运算量中有一个为实型,结果为双精度实型.例如: 5/2=2,1/2=0 5/2. ...

  2. 凸轮结构c语言编程,凸轮设计_c语言编程

    凸轮设计_c语言编程 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 一.编程:(注:程序中各个符号的含义)PI:常数 s0:理论廓 ...

  3. c语言e怎么表示_C语言程序设计(山东联盟)

    第一章 单元测试 1.单选题: 流程图中用下列哪一个图形符号表示判断?() 选项: A:矩形框 B:菱形框 C:平行四边形框 D:圆形框 答案: [菱形框] 2.单选题: 流程图中用下列哪种图形符号表 ...

  4. c语言 hello world代码_C语言基础

    首先,还是从hello world开始. #include <stdio.h> int main(void) { printf("Hello Worldn"); ret ...

  5. c语言字符串加减_C语言中指针的介绍

    C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...

  6. c语言语言教程0基础_C语言基础

    c语言语言教程0基础 Hey, Folks here I am back with my second article on C language. Hope you are through with ...

  7. c语言是非结构化程序语言_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...

    前言 C语言属于高级程序语言的一种,它的前身是"ALGOL".其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇.C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上.然而随着科 ...

  8. 打开c语言运行不了_C语言——菜鸟和大神的分水岭:内存、线程、进程

    作为一门古老的编程语言,C语言已经坚挺了好几十年了,初学者从C语言入门,大学将C语言视为基础课程.不管别人如何抨击,如何唱衰,C语言就是屹立不倒:Java.C#.Python.PHP.Perl 等都有 ...

  9. 无效的变量名c语言,变量方法用法 _C语言-w3school教程

    C语言 的 变量 变量是内存位置的名称.它用于存储数据.其值可以更改,可以重复使用多次. 它是通过符号表示内存位置的方法,以便可以容易识别. 我们来看一下声明一个变量的语法: type variabl ...

  10. c语言教程+school,C语言教程方法用法 _C语言-w3school教程

    C语言 的 C语言教程 此C语言教程与编程方法面向C语言初学者和专业人士,帮助他们轻松了解和学习C语言编程.我们的C语言教程中使用程序解释每个主题. C语言被开发用于创建系统应用程序,直接与硬件设备( ...

最新文章

  1. #if DEBUG与条件(“ DEBUG”)
  2. 导入 sun.net.TelnetInputStream; 报错
  3. PHP Extension Makefile 製作
  4. DataForm 中通过外面的按钮进行提交时,出错
  5. 信号模型噪声服从零均值高斯分布_非高斯噪声下基于分数低阶循环谱的调制识别方法...
  6. 【Spring】Spring Boot 支持 Https
  7. php array 删除末尾,PHP array_pop():删除数组末尾的元素
  8. I.MX6 Android shutdown shell command
  9. Ubantu指令收藏
  10. jxls对比_JXLS 2.4.0学习
  11. unity怎么制作云飘动_现实的动态云系统特效脚本Unity3D素材资源
  12. 模拟软件-OLED及Solar cell的模拟软件(Absorption模块)-[Setfos]
  13. icp matlab,ICP算法MATLAB仿真
  14. 图形学基础|景深效果(Depth of Field/DOF)
  15. msvcr100.dll丢失的解决方法?哪种解决方法方便点
  16. 使用OpenSSL库接口,实现AES CBC加密,基于X509 base64编码证书的RSA非对称加密例子
  17. Caused by: org.elasticsearch.action.search.SearchPhaseExecutionException报错解决
  18. Java进阶(七)Java加密技术之非对称加密算法RSA
  19. npm安装包报错,清除一下缓存
  20. CPU的功能和基本组成

热门文章

  1. STM32学习笔记2:配置TCRT5000模块(红外传感模块)调用
  2. 关于重装WIN10后有NVIDIA驱动但没有控制面板的可能的解决办法
  3. IBMX60笔记本装LINUX,Thinkpad 全系列恢复盘,告别使用盗版和繁杂的系统安装过程,免费提...
  4. 基于RFID的定位技术有几种?哪种最成熟?
  5. 一个时间的小工具_更新倒计时功能
  6. 使用jmeter进行接口压力性能测试
  7. ubuntu22.04安装网易云音乐报错解决方案
  8. vscode latex项目查看项目字数
  9. Java项目中Ehcache的使用
  10. 无人驾驶视觉-单目视觉里程计