当前位置:网站首页>C陷阱与缺陷 第7章 可移植性缺陷 7.7 除法运算时发生的截断
C陷阱与缺陷 第7章 可移植性缺陷 7.7 除法运算时发生的截断
2022-08-01 21:00:00 【weixin_客子光阴】
除法运算时发生的截断
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。例如,如果余数用于哈希表的索引,确保它是一个有效的索引值很重要。
但是它们不可能同时成立。
然而,C语言的定义只保证了第1条形式,以及当a>=0且b>0时,保证|r|<|b|以及r>=0.
0 <= h < HASHSIZE, n恒为非负,那么我们只需要像下面一样简单地写:
h = n % HASHSIZE;
然而,如果n可能为负数,而此时h也有可能为负,那么这样做就不一定总是合适的了。不过,我们已知h > -HASHSIZE,
因此可以这样写:
h = n % HASHSIZE;
if (h < 0) {
h += HASHSIZE;
}
更好的做法是,程序在设计时就应该避免n的值为负这样的情形,并且声明n为无符号数。
边栏推荐
- [Multi-task learning] Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts KDD18
- C专家编程 第1章 C:穿越时空的迷雾 1.5 今日之ANSI C
- Go 语言中常见的坑
- 15 分钟带你入门 Grafana
- C专家编程 第1章 C:穿越时空的迷雾 1.3 标准I/O库和C预处理器
- idea实用快捷键合集——持续更新
- 面试官:大量请求 Redis 不存在的数据,从而打倒数据库,有什么方案?
- kubernetes各名词缩写
- Common pits in the Go language
- 密码学的基础:X.690和对应的BER CER DER编码
猜你喜欢

面试突击70:什么是粘包和半包?怎么解决?
Godaddy域名解析速度慢问题以及如何使用DNSPod解析解决

R语言进行相关的操作

StringTable详解 串池 性能调优 字符串拼接

微服务负载均衡器Ribbon

虚拟机的IP地址自动变为127.0.0.1

Little data on how to learn?Jida latest small learning data review, 26 PDF page covers the 269 - page document small data learning theory, method and application are expounded
![[Personal work] Wireless network image transmission module](/img/64/c0cec74692df7ca05c1a5317e21c9d.png)
[Personal work] Wireless network image transmission module
![[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear](/img/6d/05233ce5c91a612b6247ea07d7982e.jpg)
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear

Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
随机推荐
98.嵌入式控制器EC实战 EC开发板开发完成
360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
Fork/Join线程池
The Internet giant development process
织梦通过数据库查询调用当前文章的留言
Pytorch框架学习记录9——非线性激活
【Dart】dart构造函数学习记录(含dart单例模式写法)
C语言之字符串函数二
R语言 线性回归的有关方法
98. Embedded controller EC actual combat EC development board development completed
C专家编程 第1章 C:穿越时空的迷雾 1.3 标准I/O库和C预处理器
【微信小程序】【AR】threejs-miniprogram 安装(76/100)
C专家编程 前言
PyTorch笔记 - Attention Is All You Need (2)
Hiking, cured my mental internal friction
4.1 配置Mysql与注册登录模块
tiup mirror
数据库内核面试中我不会的问题(1)
Internet使用的网络协议是什么