当我从方法调用中传回一个long long值时,我遇到了一个奇怪的事情。在我的应用程序中,我已经解决了这个问题,但我很想知道为什么会这样。
当我有一个定义的方法时,有人可以向我解释:
- (long long)testLong {
NSString* longString = @"100000133597162";
long long retval = [longString longLongValue];
NSLog(@"retval:%lld",retval);
return retval;
}
我按这样调用方法:
long long test = [self testLong];
NSLog(@"test:%lld",test);
结果是:
retval:100000133597162
test:410044394
这对我来说似乎很奇怪。在方法内部打印出正确的值。但是,一旦超出方法,它似乎是一个完全不同的价值。我已经逐步使用调试器,它揭示了同样的事情 - 两个不同的值。我似乎无法解释它。任何人吗?
答案 0 :(得分:4)
这不是“完全不同的价值”; 410044394
是100000133597162
的低32位。您几乎可以肯定地忽略了包含头文件,或者将该方法声明为在某处返回long
或int
。
如果你的调用函数无法弄清楚正确的返回类型是什么,它将假设它是类型id
,它在iPhone上是32位宽,这将产生你的截断“看到这里。
同样,如果你的调用函数有一个原型,它在iPhone上声明返回类型为32位宽(如long
或int
),你会看到相同的截断效果。 / p>