当前位置:网站首页>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为无符号数。
边栏推荐
- 【Dart】dart构造函数学习记录(含dart单例模式写法)
- 列表页常见的 hook 封装
- kubernetes各名词缩写
- 织梦通过数据库查询调用当前文章的留言
- 函数(二)
- What is the difference between a utility model patent and an invention patent?Understand in seconds!
- 基于FPGA的任意字节数(单字节、多字节)的串口(UART)发送(含源码工程)
- StringTable Detailed String Pool Performance Tuning String Concatenation
- 线上问题排查常用命令,总结太全了,建议收藏!!
- C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
猜你喜欢
OSG笔记:设置DO_NOT_COMPUTE_NEAR_FAR,手动计算远近平面
"Torch" tensor multiplication: matmul, einsum
案例:MySQL主从复制与读写分离
Interview assault 70: what is the glue bag and a bag?How to solve?
C专家编程 前言
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
MySQL Syntax Basics
Pytorch框架学习记录9——非线性激活
函数(二)
Remove 360's detection and modification of the default browser
随机推荐
LinkedList source code sharing
R语言 线性回归的有关方法
Godaddy domain name resolution is slow and how to use DNSPod resolution to solve it
Pytorch框架学习记录10——线性层
Pytorch框架学习记录12——完整的模型训练套路
iptables的使用简单测试
1374. 生成每种字符都是奇数个的字符串 : 简单构造模拟题
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
SIPp installation and use
进行交互或动画时如何选择Visibility, Display, and Opacity
C专家编程 第1章 C:穿越时空的迷雾 1.5 今日之ANSI C
excel高级绘图技巧100讲(二十二)-如何对不规则数据进行分列
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear
AQS原理和介绍
附录A printf、varargs与stdarg A.1 printf函数族
Hangao data import
PyTorch笔记 - Attention Is All You Need (2)
网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
4.1 配置Mysql与注册登录模块
idea插件generateAllSetMethod一键生成set/get方法以及bean对象转换