c语言中负数参与除法,C语言中负数除法与右移取整问题
今天碰到了负数除法与右移的替代问题,借机研究一下C语言中负数除法的问题。此处只讨论整数除2的幂次方的情况,并取-7~-5除以4为例,不讨论一般除法的移位优化。
1. 负数右移
对于有符号整数,右移时按高位补符号位的原则,则结果会向小于它的整数取整。如
-5 >> 2 = -2;
-6 >> 2 = -2;
-7 >> 2 = -2;
2. 负数除法(截断)
博文《议“右移一位 等同于 除以二”》http://blog.chinaunix.net/uid-406135-id-3421605.html中有这样一段描述:“C99和C++0x规定,商向零靠近取整,在C99和C++0x之前,只保证商*除数+余数==被除数,如果希望商向零靠近取整,应当使用div函数。”
那上述算式就会有结果:
-5 / 4 = -1;
-6 / 4 = -1;
-7 / 4 = -1;
3. 负数除法(四舍五入)
四舍五入的意义就在于向临近的整数取整,但问题就在于对.5这个临界点如何进行处理。这里有一种说法,即是说对于负数相除四舍五入的情况,可以先将符号拿掉,按正整数做除法,最后再把符号位加到结果上即可。那上述算式的结果应该为:
-5 / 4 = -1;
-6 / 4 = -2;
-7 / 4 = -2;
即
sign(val) * (abs(val) +(1<< (n-1) )>> n)。
Microsoft Excel的取整就是采用这种方法。
在.5这个临界点上,对于正负值都是向上取整。即是说按公式(val+ (1 << (n-1))) >> n进行计算。即:
-5 / 4 = -1;
-6 / 4 = -1;
-7 / 4 = -2;
c语言中负数参与除法,C语言中负数除法与右移取整问题相关推荐
- c语言二进制负数的除法,C语言中负数除法与右移取整问题
今天碰到了负数除法与右移的替代问题,借机研究一下C语言中负数除法的问题.此处只讨论整数除2的幂次方的情况,并取-7~-5除以4为例,不讨论一般除法的移位优化. 1. 负数右移 对于有符号整数, ...
- php中round函数能给整数用吗,PHP四舍五入、取整、round函数使用
这篇文章主要介绍了PHP四舍五入.取整.round函数使用示例,需要的朋友可以参考下 小数例子: PHP保留两位小数并且四舍五入 代码如下:$n=0.1265489; echo sprintf(&qu ...
- c语言字母字符参与运算,c语言字符串可以参加运算吗?
最佳答案 可以运算,但字串连接要用函数不能直接用+ 追问: 比如怎么运算?能写一个表达式吗? 追答: 可以,如char *s="123456";char *s1;s1=s+2; / ...
- python的取整和取余_python中取整运算符
Python几种取整的方法 python 为什么算除法自动取整了.,计算10/a 在2.x版本都是这样,会自动取整. 在3.x版本以上改了,结果保留浮点数.系统本身设计就这样的.可以认为是开发pyth ...
- Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略
Python编程语言学习:python中与数字相关的函数(取整等).案例应用之详细攻略 目录 python中与数字相关的函数 1.对小数进行向上取整 1.1.利用numpy库 1.2.利用math库
- 除法的向上取整和向下取整
向上取整:比自己大的最小整数. 两个数相除向上取整:(a + b - 1) / b.比如:(13 / 3) = 4.向上取整:(13 + 3 - 1) / 3 = 5.另外还可以用C++中的ceil( ...
- 在js中对数值进行取整、四舍五入等方法汇总
在Js中,对数值进行操作的场景有: 向上取整: ceil 向下取整: floor 四舍五入: round 固定精度: toFixed 固定长度 : toPrecision 取整: parse ...
- 解决java中浮点数相除向上取整出错的方法
实际应用中,经常可以遇到浮点数之间相除然后向上取整,比如客流量与常量之比和店员数之间就应向上取整,多一个人都应该加一名员工. 先谈谈什么是向上取整,什么是向下取整 上取整,不管四舍五入的规则,只要后面 ...
- vba中取小数点后两位数_Excel VBA之函数篇-3.24整数小数随意切换 如何取整你说的算...
前景提要 按照计划,今天将会是函数篇的最后一节了,函数篇已经持续更新了23篇了,前前后后也是和大家分享了不少VBA中的函数知识,有些函数可能大家并不是很在意,因为他的功能并不是很强大,有些函数大家则是 ...
- C语言中四种取整方式、取余/取模的运算以及负数取模的问题
零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...
最新文章
- 亿级流量系统架构之如何设计承载百亿流量的高性能架构【石杉的架构笔记】...
- xposed hook 构造函数_初识Xposed(上)
- 基于WINCE6.0的nandflash驱动(基于K9F1G08U0B)
- Linux网络编程——I/O复用之poll函数
- [SDOI2011]计算器 BSGS
- Leetcode226. 翻转二叉树(递归、迭代、层序三种解法)
- 从Qt4 迁移到Qt5 winEvent代替为nativeEvent
- Redis事务及持久化
- g的python实现_Python Gevent
- 神器!Alibaba Sentinel,功能真心强大!
- Mysql通过sql添加字段
- 四种常见数据模型(维度模型、范式模型等)
- 8000计算机论文范文,计算机毕业论文_计算机论文范文8000字_毕业论文8000字范例...
- CSS3 Box-sizing属性以及解决兼容性的一些做法
- 一维数组和二维数组的定义及用法
- 《IT项目管理》(郭宁编著) 课后习题答案
- js 获取汉字首拼和全拼和拼音
- app被Rejected 的各种原因翻译
- 讲一个玩 HASS 一年的故事
- 构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解