0
long long d = 1000*3600*24*365;
NSLog(@"d:%lld",d);

NSLog(@"year:%d",d/(1000*3600*24*365));

d = 100*1000*3600*24*365;
NSLog(@"year:%d",d/(1000*3600*24*365));

結果:

usworldpro[1106:c203] year:1

usworldpro[1106:c203] year:0

なぜこれが結果なのですか?型変換の問題かもしれませんが、理由がわかりません。誰が私にそれを説明できますか?

4

1 に答える 1

2

その理由は、リテラルが整数(int)であり、長整数ではないため、各中間結果がであるためです。試す:

     long long d = 1000ll*3600ll*24ll*365ll;
     NSLog(@"d:%lld",d);

     NSLog(@"year:%d",d/(1000ll*3600ll*24ll*365ll));

     d = 100ll*1000ll*3600ll*24ll*365ll;
     NSLog(@"year:%d",d/(1000ll*3600ll*24ll*365ll));

ただし、間違った形式を伝えるNSLogなどprintfは常に悪い考えです。

于 2012-08-07T15:44:32.803 に答える