c语言负数除法运算过程,C语言负数的除法和求余运算
假定我们让 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 语言的定义虽然有时候会带来不需 的灵活性,但大多数时候,只要编程者清楚地知道要做什么、该做什么,这个定义对让整数除法运算满足其需要来说还是够用了的。例如,
假定我们有一个数 n,它代表标识符中的字符经过某种函数运算后的结果,我们希望通过除 法运算得到哈希表的条目 h,满足 0<=h
h=n%HASHSIZE:
然而,如果 n 有可能为负数,而此时 h 也有可能为负,那么这样做就不一定总是合适 的了。不过,我们己知 h>-HASHSIZE,因此我们可以这样写:
h = n % HASHSIZE;
if(n < 0)
h += HASHSIZE;
更好的做法是,程序在设计时就应该避免 n 的值为负这样的情形,并且声明 n 为无符号数。
测试代码:
#include
main()
{
int a=-, b=;
int q,r;
q = a / b;
r = a % b;
printf("q=%d, r=%d\n", q, r);
}
Swift 求余运算
求余运算 求余运算(a % b)是计算b的多少倍刚刚好可以容入a,返回多出来的那部分(余数). 注意:求余运算(%)在其他语言也叫取模运算.然而严格说来,我们看该运算符对负数的操作结果,"求 ...
java 整除(/) 求余(%) 运算
1. java 整除(/) 求余(%) 运算 1.求余 System.out.println(11%2); //顾名思义就是11除2的余数-->1 System.out. ...
PHP:第一章——按位运算和求余运算(判断奇偶数)
051-PHP求余运算
和求余运算巧妙结合的jns指令
.text:004A78B1 and eax, 80000001h.text:004A78B6 jns short loc_4A78BD.text:004A78B8 dec eax.text:00 ...
Sicily1020-大数求余算法及优化
Github最终优化代码: https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1020.c 题目如下: 1020. ...
Verilog求余
在实现三角函数时,考虑到函数的周期性,综量(自变量)需对周期做求余运算. 假设函数周期为T = 2^N,那么求余运算就是直接取该数的低N位,即: 以M位正数为例(符号位为0),reg [M-1:0] ...
java学习--高效的除模取余运算(n-1)&;hash
没有测试过使用取余运算符和位运算符都做同一件事时的时间效率! 取余运算符% 如3除以2取余数 a = a%; 结果为1 上面是传统的方式进行求余运算. 需要先将10进制转成2进制到内存中进行计算,然后 ...
C语言 负数取余的原理
负数求余数运算是一个数学问题: 任何一个整数n都可以表示成 n=k*q+r 其中0<=|r|
随机推荐
如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户
阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...
win10 64位专业版系统中显示32位dcom组件配置的方法
word.excel是32位的组件,当用户64位系统在运行窗口中输入dcomcnfg命令时,在打开的组件服务管理窗口,是找不到Microsoft Excel.word程序的.另外,Windows 环境 ...
新浪微博顶部新评论提示层效果——position:fixed
c语言负数除法运算过程,C语言负数的除法和求余运算相关推荐
- c语言乘法运算 相对于,C语言中,求余运算与乘除法运算,哪个的优先级高
C语言中,求余运算与乘除法运算,优先级一样高. C语言是一门面向过程的.抽象化的通用程序设计语言,广泛应用于底层开发.C语言能以简易的方式编译.处理低级存储器.C语言是仅产生少量的机器语言以及不需要任 ...
- C语言简单计算器考虑优先级,利用你现有的c语言知识 设计开发一个简易计算器,可进行加、减、乘、除、求余运算。...
满意答案 nxy_159 推荐于 2017.11.21 采纳率:52% 等级:9 已帮助:3561人 #include float numA = 0; float numB = 0; float ...
- java大整数的加减乘除_关于大整数的加减乘除求余运算 java
自己用java 实现了大字符串整数的加减乘除和求余运算, 加减法的算法是模拟手工笔算的计算过程, 除法就是从最高位不停的减操作, 乘法的算法 :遍历一个数的各个位数以及他所在位置,另一个数根据这个数的 ...
- 求余运算转换为位运算
因为求余运算要用到除法,除法是比较费时的.因此高性能的程序需要对求余进行转换. 如果被求余数是2的整数次幂,可以用位运算来进行转换,从而得到比较高的效率. 例如求 n % 32 = ??? 可以将其转 ...
- 整除/ 与 求余% 运算
C++自学精简教程 目录(必读) 整数的除法运算与求余运算 计算机计算整数除法和求余依照下图所示的逻辑计算: 用整数除法判断会遇到一个坑: 7/2 == 3 6/2 == 3 所以: 7/2 == 6 ...
- c语言余一个负数_C语言负数的除法和求余运算
假定我们让 a 除以 b,商为 q,余数为 r: q = a / b; r = a % b; 这里,不妨假定 b 大于 0. 我们希望 a.b.q.r 之间维持怎样的关系呢? 1.最重的一点,我们希望 ...
- c语言精髓之编译过程,C语言精髓知识点
1.字节数: Char:1个字节 Unsigned:1个字节 Short:2/4个字节 Int:2/4个字节 Unsigned int:2/4个字节 编译器在32位一下: Long:4个字节 Unsi ...
- 实数范围内(包含负数)的求模与求余运算异同
以下内容主要总结整理自以下文献: 一.实数的取余运算 二.取模和取余的区别 三.负数.取模与取余 背景 最近在一道 Java 习题中,看到这样的一道题: What is the output when ...
- C语言-算术表达式-加,减,乘,除,求余
C语言的一些编程的注意点: 1.#include<stdio.h>为头文件,一定要写,这个头文件与printf有关.是C语言源代码不可或缺的组成部分. 2.main函数,在程序中有且仅有一 ...
- c语言编译为机器语言过程,C语言编译全过程
C语言编译全过程 编译的概念 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成 ...
最新文章
- 编程控制Word文档中Table的赋值
- vim中搭建与sourceinsight类似功能
- iOS网络编程之同步、异步、请求队列
- 浅析 Mybatis 与 Hibernate 的区别与用途
- java性能监视_Java 9和应用程序性能监视的激动人心之处
- Linux 命令快捷键
- python入门之函数调用第三关-Python 基础3 函数function
- Linux 基础命令3 shell
- 服务器上多个php,php – 在多个服务器上扩展cronjobs
- html 显示动态时间
- 八类网线和七类网线的区别_超6类和7类网线的区别
- 计算机教育思维,计算机教育中计算思维的培育
- 前台请求报:ERR_EMPTY_RESPONSE错误
- Python 爬取手机 豆果美食app存Mongodb
- 【欧拉降幂公式】【欧拉函数】
- Epson针式打印机打印十六进制内容解决方案
- VMWare中CentOS7增加系统盘空间
- 【JAVA面试题】java面试题100道详解
- 【POJ No. 2431】 丛林探险 Expedition
- 好用的翻译软件-大家都在用的互译软件