Отдел и НГУИнтегер - PullRequest
       15

Отдел и НГУИнтегер

0 голосов
/ 14 марта 2009

У меня есть некоторые вычисления, которые включают отрицательные значения:

row = (stagePosition - col) / PHNumRow;

Скажите, что stagePosition равно -7, а col равно 1. Они оба NSInteger, включая строку. PHNumRow равен 8.

Если PHNumRow - NSInteger, я получаю ожидаемый результат: -1. Но если PHNumRow равен NSUInteger, результатом будет мусор.

Почему это должно иметь значение, если делитель не подписан или подписан? Я не помещаю результат в беззнаковое целое.

1 Ответ

4 голосов
/ 14 марта 2009

Из-за целочисленного продвижения. Когда вычисляется правая часть, все аргументы повышаются до наивысшего типа операндов выражения, которые, если PHNumRow без знака, будут целым числом без знака. Компилятор делает что-то похожее на следующее:

((NSUInteger)stagePosition - (NSUInteger)col) / PHNumRow;

Так как, stagePosition отрицателен, есть обходной путь, и ваши вычисления идут бум!

...