Бинарными (т. е. с двумя операндами) арифметическими операторами являются +, -, *, /, а также оператор деления по модулю %.
Деление целых сопровождается отбрасыванием дробной части.
#include <stdio.h>
int main(void)
{
int a = 17;
int b = 3;
float c = 0;
c = a / b;
printf("%f\n", c);
return 0;
}
Картина меняется, если одну из переменных (либо float a = 17, либо float b = 3) опредлеить как float. Тогда
Выражение x % y дает остаток от деления x на y и 0 (нуль), если x делится на y нацело.
Например, год является високосным, если он делится на 4, но не делится на 100. Кроме того, год является високосным, если он делится на 400.
#include <stdio.h>
int main(void)
{
int year;
for (year = 2004; year <= 2014; ++year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
printf("%d високосный год\n", year);
else
printf("%d невисокосный год\n", year);
}
return 0;
}
Оператор % к операндам типов float и double не применяется.
1. #include <stdio.h>
2. int main(void)
3. {
4. printf("17.0 % 5.0 = %d\n", 17.0 % 5.0);
5. return 0;
6. }
test.c: In function 'main':
test.c:4:38: error: invalid operands to binary % (have 'double' and 'double')
Бинарные операторы + и - имеют одинаковый приоритет, который ниже приоритета операторов *, / и %, который в свою очередь ниже приоритета унарных операторов + и -. Арифметические операции одного приоритетного уровня выполняются слева направо.
#include <stdio.h>
int main(void)
{
int a = 17;
int b = 3;
float c = 0;
c = a / b;
printf("%f\n", c);
return 0;
}
$ ./a.out5.000000
Тогда как 17 / 3 = 5,6666666666666666666666666666667
Картина меняется, если одну из переменных (либо float a = 17, либо float b = 3) опредлеить как float. Тогда
$ ./a.out5.666667
Выражение x % y дает остаток от деления x на y и 0 (нуль), если x делится на y нацело.
Например, год является високосным, если он делится на 4, но не делится на 100. Кроме того, год является високосным, если он делится на 400.
#include <stdio.h>
int main(void)
{
int year;
for (year = 2004; year <= 2014; ++year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
printf("%d високосный год\n", year);
else
printf("%d невисокосный год\n", year);
}
return 0;
}
Оператор % к операндам типов float и double не применяется.
1. #include <stdio.h>
2. int main(void)
3. {
4. printf("17.0 % 5.0 = %d\n", 17.0 % 5.0);
5. return 0;
6. }
test.c: In function 'main':
test.c:4:38: error: invalid operands to binary % (have 'double' and 'double')
В какую сторону (в сторону увеличения или уменьшения числа) будет усечена дробная часть при выполнении / зависит от машины.
В моем случае, в сторону уменьшения.
Каким будет знак результата операции % с отрицательными операндами, так же, зависит от машины. В моем случае знак "-".
В моем случае, в сторону уменьшения.
Каким будет знак результата операции % с отрицательными операндами, так же, зависит от машины. В моем случае знак "-".
#include <stdio.h>
int main(void)
{
signed int x = -8;
signed int y = -5;
printf("-8 %% -5 = %d\n", x % y);
return 0;
}
int main(void)
{
signed int x = -8;
signed int y = -5;
printf("-8 %% -5 = %d\n", x % y);
return 0;
}
$ ./a.out-8 % -5 = -3
Бинарные операторы + и - имеют одинаковый приоритет, который ниже приоритета операторов *, / и %, который в свою очередь ниже приоритета унарных операторов + и -. Арифметические операции одного приоритетного уровня выполняются слева направо.
Комментариев нет:
Отправить комментарий