Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Целочисленное  деление Objective-C

0

Многие начинающие программисты С удивляются тому, как работает целочисленное деление. Давайте попробуем:

#include <stdio.h>

int main (int argc, const char * argv[])

{

printf("3 * 3 + 5 * 2 = %d\n", 3 * 3 + 5 * 2);

printf("11 / 3 = %d\n", 11 / 3);

return 0;

}

Должно получиться 11 / 3 – 3.666667, верно? А вот и нет. Результат деления 11 / 3 равен 3. При делении одного целого числа на другое всегда получается целое число, Система округляет результат отсечением дробной части (таким образом, при делении

-11 / 3 получится -3). И это выглядит вполне разумно, если рассматривать операцию так: «11 делим на 3 – получается 3 с остатком 2». Однако остаток от деления достаточно часто тоже важен. Оператор % похож на /, но вместо частного он возвращает остаток от деления:

#include <stdio.h>

int main (int argc, const char * argv[])

{

printf("3 * 3 + 5 * 2 = %d\n", 3 * 3 + 5 * 2);

printf("11 / 3 = %d remainder of %d \n", 11 / 3, 11 % 3);

return 0;

}

А если вы все равно хотите получить 3.666667 вместо 3? Преобразуйте int во float оператором преобразования типа. Нужный тип указывается в круглых скобках слева от переменной, которую нужно преобразовать. Преобразуйте делитель к типу float перед выполнением операции:

int main (int argc, const char * argv[])

{

printf("3 * 3 + 5 * 2 = %d\n", 3 * 3 + 5 * 2);

printf("11 / 3 = %d remainder of %d \n", 11 / 3, 11 % 3);

printf("11 / 3.0 = %f\n", 11 / (float)3);

return 0;

}

Теперь вместо целочисленного деления будет выполняться деление вещественное, и вы получите 3.666667. Запомните правило: оператор / выполняет целочисленное деление только в том случае, если и делимое и делитель относятся к целому типу. Если хотя бы одно из двух чисел является вещественным, то вместо целочисленного деления выполняется вещественное.

Сокращенная  запись

Все операторы, рассмотренные нами до настоящего момента, давали новый результат. Например, чтобы увеличить переменную х на 1, вы используете оператор + и заносите результат обратно в х:

int x = 5;

x = x + 1; // Значение х теперь равно 6

Программисты С выполняют подобные операции так часто, что для них были созданы специальные операторы, изменяющие значение переменной без лишнего присваивания. Например, для увеличения значения х на 1 можно использовать оператор инкремента (++):

int x = 5;

x++; //Значение х теперь равно 6

Также существует оператор декремента (–), уменьшающий значение на 1:

int x = 5;

x-­‐-­‐; //Значение х теперь равно 4

А если потребуется увеличить х не на 1, а на 5? Конечно, можно использовать сложение с последующим присваиванием:

int х = 5;

х= х+ 5; // Значение х равно 10

Но и для этой операции тоже существует сокращенная запись:

int x = 5;

x += 5; // х is 10

Вторая строка читается как «присвоить х значение х+5». Наряду с оператором

+= также существуют операторы -=,*=, /= и %=.

Для вычисления модуля (абсолютной величины) целого числа вместо оператора используется функция abs(). Если потребуется вычислить модуль значения типа long, используйте функцию labs(). Обе функции объявляются в файле stdlib.h:

#include <stdio.h>

#include <stdlib.h>

int main (int argc, const char * argv[])

{

printf("3 * 3 + 5 * 2 = %d\n", 3 * 3 + 5 * 2);

printf("11 / 3 = %d remainder of %d \n", 11 / 3, 11 % 3); printf("11 / 3.0 = %f\n", 11 / (float)3);

printf("The absolute value of -­‐5 is %d\n", abs(-­‐5));

return 0;

}

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии