簡體   English   中英

Objective-C整數算術

[英]Objective-C Integer Arithmetic

我正在嘗試計算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,依此類推。 在執行除法之前,您可能希望將一些數字轉換為浮點形式。

您還遇到了優先問題。 在表達中

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;

可能沒有必要讓一切都變成雙倍。

我認為你需要在這里使用float而不是int。 它將以你想要的方式工作! 也會給你小數回答。

按優先順序,操作:

60 / (12 * 50) 

在乘以1000之前執行。

此值小於1並轉換為int ,將其截斷為0 並且0次是0

使用float或首先乘以1000以確保在計算中不會傳播0

表達式中的所有操作都以整數運算執行,這意味着每個中間結果的小數部分都會被截斷。 這意味着如果將較小的整數除以較大的整數,則總是得到0。

要獲得您想要的結果,您必須確保以特定順序執行操作,或者必須使用浮點數。 例如,結果

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

應該是o = 100。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM