当前位置:网站首页>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为无符号数。
边栏推荐
猜你喜欢

R语言进行相关的操作

仿牛客论坛项目

STAHL触摸屏维修一体机显示屏ET-316-TX-TFT常见故障

Use WeChat official account to send information to designated WeChat users

StringTable详解 串池 性能调优 字符串拼接
Godaddy域名解析速度慢问题以及如何使用DNSPod解析解决

【Dart】dart构造函数学习记录(含dart单例模式写法)

MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
![漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]](/img/37/09ab9b5a490c6ab9bc7991ecc4c8f4.png)
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]

【Kaggle】House Prices
随机推荐
LinkedList source code sharing
Godaddy domain name resolution is slow and how to use DNSPod resolution to solve it
Pytorch框架学习记录12——完整的模型训练套路
Questions I don't know in database kernel interview(1)
字符串
Pytorch框架学习记录13——利用GPU训练
【Dart】dart之mixin探究
Use WeChat official account to send information to designated WeChat users
WeChat applet cloud development | personal blog applet
SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
扣减库存方案
这些 hook 更优雅的管理你的状态
Imitation cattle forum project
通过这两个 hook 回顾 Set/Map 基础知识
Which websites are commonly used for patent searches?
织梦模板加入php代码
The configuration manual for the secondary development of the XE training system of the missing moment document system
R语言 pca主成分分析的主要方法
idea实用快捷键合集——持续更新
LinkedList源码分享