看代码
NSNumber *number = @(2147483648); // int能表示的最大数是2的31次方-1=2147483647(int占4个字节,总共32位,最高位是符号位不参与运算)
NSLog(@"%d", number.intValue);
NSLog(@"%lu", number.integerValue);
打印结果:
2022-02-23 19:25:33.504119+0800 0.test[53997:537254] -2147483648
2022-02-23 19:25:33.504284+0800 0.test[53997:537254] 2147483648
2147483648超出了int能表示的最大值,所以出现了负数。
int能表示的最大数是2的31次方-1=2147483647(int占4个字节,总共32位,最高位是符号位不参与运算)
为了更加保险,还是使用NSInteger更安全些。
#if __LP64__ || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
网友评论