zoukankan      html  css  js  c++  java
  • WindowsAPI: MulDiv


    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;
    
  • 相关阅读:
    Cookies的实际存储位置
    搭建Git本地服务器
    在Tomcat中部署war
    Server.xml配置解析
    Tomcat配置详解,配置文件server.xml详解
    将centos7打造成桌面系统
    英语词汇大全
    商场/超市常见英语标识
    商务英语词汇大全
    常用繁体字大全
  • 原文地址:https://www.cnblogs.com/del/p/1579553.html
Copyright © 2011-2022 走看看