文档章节

WindowsAPI: MulDiv

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 269
阅读 2
收藏 0

MulDiv(a, b, c) 中的 a、b、c 是三个 Integer, 同时返回一个 Integer.

其计算方式类似于: a * b / c 或 a * b div c, 但也有区别.

//例一: 相同处
var
  a,b,c,n1,n2: Integer;
begin
  a := 4;
  b := 3;
  c := 2;
  n1 := a * b div c;
  n2 := MulDiv(a, b, c);
  ShowMessageFmt('%d : %d', [n1, n2]); {6 : 6}
end;

 
 
 
 
 

 

 

  

//例二: MulDiv 中前两个 32 位整数 a 和 b 相乘后会先得出一个 64 位整数, 这可以尽量使运算不会溢出.
var
  a,b,c,n1,n2: Integer;
begin
  a := MaxInt div 2;
  b := 3;
  c := 2;
  n1 := a * b div c;     {这个运算会溢出}
  n2 := MulDiv(a, b, c); {MulDiv 会算出正确的结果}
  ShowMessageFmt('%d : %d', [n1, n2]); {-536870913 : 1610612735}
end;

 
 
 
 
 

 

 

  

//例三: MulDiv 会自动四舍五入.
var
  a,b,c,n1,n2: Integer;
begin
  a := 1;
  b := 7;
  c := 4;
  n1 := a * b div c;     {这个结果只是截取了整数部分}
  n2 := MulDiv(a, b, c); {MulDiv 会四舍五入}
  ShowMessageFmt('%d : %d', [n1, n2]); {1 : 2}
end;

 
 
 
 
 

 

 

  

//例四: 也有 MulDiv 算不了的, 算不了就返回 -1
var
  n1,n2: Integer;
begin
  n1 := MulDiv(MaxInt, MaxInt, 2);
  n2 := MulDiv(1, 2, 0);
  ShowMessageFmt('%d : %d', [n1, n2]); {-1 : -1}
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/10/09/1579553.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
VC++信息安全编程(13)Windows2000/xp/vista/7磁盘扇区读写技术

有些时候,我们读取磁盘文件,会被hook.我们读到的可能并非实际的文件。 我们直接读取磁盘扇区获取数据。 实现磁盘数据的读写,不依赖WindowsAPI。 void CSectorEdit2000Dlg::OnView(){Upda...

junwong
2012/03/09
0
0
关于控制台中reg命令

在cmd中,我们使用 reg export hklmsoftwaremicrosoftmytree d:1.reg 即可导出注册表项,其中mytree是我手动创建的。 然后我在vs里面调用 WinExec("reg export hklmsoftwaremicrosoftmytree ...

开源中国首席问题男
2015/04/28
53
1
c++string如何读取在文本中的unicode编码

c++string如何读取在文本中的unicode编码,比如读取文本中的u6C49u5B57,解析成“汉字”,而不是解析成字符串。本人用原生c++,不依赖微软的库和WindowsAPI。对能给出正解的人万分感谢!...

编程老头
2013/05/12
6.3K
8
[2013.9.6]说说Win7的Aero效果

最近看到别人写的一个例程,就是把控制台弄成了全透明,我把源码下载下来做了研 究。 其实从Vista版本之后,WindowsAPI里面增加了几个函数,用于Aero效果的实现。有 两个最主要的:DwmExtend...

apachecn_飞龙
2014/05/16
0
0
golang 开发windows应用

闲着无聊又玩go语言找虐。。。——用go开发windows应用程序 想要用go开发windows应用必须先要安装必要的组件: walk集成了很多windows的控件 go get github.com/lxn/walk win是go调用windows...

KelvinQ
2015/02/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
2
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
5
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
35
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部