c/c++语言开发共享Objective-C整数算术

我正在尝试计算iPhone应用程序中的一些数字。

int i = 12; int o = (60 / (i * 50)) * 1000; 

我希望在这个例子中o为100(即毫秒),但它等于0,由NSLog(@“%d”,o)显示。

这也等于0。

 int o = 60 / (i * 50) * 1000; 

这相当于250,000,这是从左到右的直接数学。

 int o = 60 / i * 50 * 1000; 

什么在我头顶飞过?

谢谢,
缺口

    在Objective-C /对整数参数执行整数除法,因此4/5被截断为0,3 / 2被截断为1,依此类推。 您可能希望在执行除法之前将一些数字转换为浮点forms。

    您还遇到了优先问题。 在表达中

     60 / (i * 50) * 1000 

    括号内的术语首先计算,因此60除以600,产生结果0

     60 / i * 50 * 1000 

    第一个操作是将60除以12,得到结果5,然后进行乘法运算。

    除以整数的整数是整数。

    所以60/600不是0.1 ,它是0

    将某些东西转换(或声明)为float代替。

    更换:

     int o = (60 / (i * 50)) * 1000; 

    有:

     int o = 1200/i; 

    它正在进行整数数学运算。 60 /(12 * 50)为0.1,截断为0。

    如果强制浮点然后强制转换为整数,则应该有效。

     int o = (int)(60.0 / ((double) i / 50.0) * 1000.0; 

    可能没有必要让一切都变成双倍。

    按优先顺序,操作:

     60 / (12 * 50) 

    在乘以1000之前执行。

    此值小于1并转换为int ,将其截断为0 。 并且0次是0

    使用float或首先乘以1000以确保您不会在计算中传播0

    表达式中的所有操作都以整数运算执行,这意味着每个中间结果的小数部分都会被截断。 这意味着如果将较小的整数除以较大的整数,则总是得到0。

    要获得您想要的结果,您必须确保以特定顺序执行操作,或者必须使用浮点数。 例如,结果

     int o = (60.0 / (i * 50.0)) * 1000.0; 

    应该是o = 100。

    我认为你需要在这里使用float而不是int。 它会以你想要的方式工作! 也会给你小数回答。

      以上就是c/c++开发分享Objective-C整数算术相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549558.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐