У меня есть следующий код:
NSUInteger one = 1;
CGPoint p = CGPointMake(-one, -one);
NSLog(@"%@", NSStringFromCGPoint(p));
Его вывод:
{4.29497e+09, 4.29497e+09}
С другой стороны:
NSUInteger one = 1;
NSLog(@"%i", -one); // prints -1
Я знаю, что, вероятно, какой-топроисходит переполнение, но почему эти два случая отличаются и почему это не работает так, как я хочу?Должен ли я всегда напоминать себе о конкретном числовом типе моих переменных и выражений даже при выполнении тривиальной арифметики?
PS Конечно, я мог бы использовать unsigned int
вместо NSUInteger
, без разницы.