今天碰到了负数除法与右移的替代问题,借机研究一下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语言中负数除法与右移取整问题相关推荐

  1. c语言二进制负数的除法,C语言中负数除法与右移取整问题

    今天碰到了负数除法与右移的替代问题,借机研究一下C语言中负数除法的问题.此处只讨论整数除2的幂次方的情况,并取-7~-5除以4为例,不讨论一般除法的移位优化. 1.     负数右移 对于有符号整数, ...

  2. php中round函数能给整数用吗,PHP四舍五入、取整、round函数使用

    这篇文章主要介绍了PHP四舍五入.取整.round函数使用示例,需要的朋友可以参考下 小数例子: PHP保留两位小数并且四舍五入 代码如下:$n=0.1265489; echo sprintf(&qu ...

  3. c语言字母字符参与运算,c语言字符串可以参加运算吗?

    最佳答案 可以运算,但字串连接要用函数不能直接用+ 追问: 比如怎么运算?能写一个表达式吗? 追答: 可以,如char *s="123456";char *s1;s1=s+2; / ...

  4. python的取整和取余_python中取整运算符

    Python几种取整的方法 python 为什么算除法自动取整了.,计算10/a 在2.x版本都是这样,会自动取整. 在3.x版本以上改了,结果保留浮点数.系统本身设计就这样的.可以认为是开发pyth ...

  5. Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略

    Python编程语言学习:python中与数字相关的函数(取整等).案例应用之详细攻略 目录 python中与数字相关的函数 1.对小数进行向上取整 1.1.利用numpy库 1.2.利用math库

  6. 除法的向上取整和向下取整

    向上取整:比自己大的最小整数. 两个数相除向上取整:(a + b - 1) / b.比如:(13 / 3) = 4.向上取整:(13 + 3 - 1) / 3 = 5.另外还可以用C++中的ceil( ...

  7. 在js中对数值进行取整、四舍五入等方法汇总

    在Js中,对数值进行操作的场景有: 向上取整: ceil 向下取整: floor 四舍五入: round 固定精度:  toFixed 固定长度 :  toPrecision 取整:    parse ...

  8. 解决java中浮点数相除向上取整出错的方法

    实际应用中,经常可以遇到浮点数之间相除然后向上取整,比如客流量与常量之比和店员数之间就应向上取整,多一个人都应该加一名员工. 先谈谈什么是向上取整,什么是向下取整 上取整,不管四舍五入的规则,只要后面 ...

  9. vba中取小数点后两位数_Excel VBA之函数篇-3.24整数小数随意切换 如何取整你说的算...

    前景提要 按照计划,今天将会是函数篇的最后一节了,函数篇已经持续更新了23篇了,前前后后也是和大家分享了不少VBA中的函数知识,有些函数可能大家并不是很在意,因为他的功能并不是很强大,有些函数大家则是 ...

  10. C语言中四种取整方式、取余/取模的运算以及负数取模的问题

    零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...

最新文章

  1. 亿级流量系统架构之如何设计承载百亿流量的高性能架构【石杉的架构笔记】...
  2. xposed hook 构造函数_初识Xposed(上)
  3. 基于WINCE6.0的nandflash驱动(基于K9F1G08U0B)
  4. Linux网络编程——I/O复用之poll函数
  5. [SDOI2011]计算器 BSGS
  6. Leetcode226. 翻转二叉树(递归、迭代、层序三种解法)
  7. 从Qt4 迁移到Qt5 winEvent代替为nativeEvent
  8. Redis事务及持久化
  9. g的python实现_Python Gevent
  10. 神器!Alibaba Sentinel,功能真心强大!
  11. Mysql通过sql添加字段
  12. 四种常见数据模型(维度模型、范式模型等)
  13. 8000计算机论文范文,计算机毕业论文_计算机论文范文8000字_毕业论文8000字范例...
  14. CSS3 Box-sizing属性以及解决兼容性的一些做法
  15. 一维数组和二维数组的定义及用法
  16. 《IT项目管理》(郭宁编著) 课后习题答案
  17. js 获取汉字首拼和全拼和拼音
  18. app被Rejected 的各种原因翻译
  19. 讲一个玩 HASS 一年的故事
  20. 构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解

热门文章

  1. Widevine DRM介绍
  2. 数字信号处理(matlab版)(第3版) pdf,数字信号处理-(第3版)-(MATLAB版)
  3. 迅雷精简版依托迅雷强大的P2P资源网络和独特的下载技术
  4. mac系统安装spss
  5. Android自定义popWindow教程
  6. 你有全面了解过LIMS系统吗?
  7. c2000 电阻采样_采样电阻规范阻值表
  8. java姓名转拼音加处理多音字
  9. CodeBlocks下载、安装与编写C语言
  10. 专利局文件如何删除后面的注意事项