取模(除法运算的余数)(%)
取模运算符产生下列表达式给定的余数,其中 e1 是第一个操作数,e2 是第二个操作数:e1 - (e1 / e2) * e2,其中两个操作数都是整型类型。
取模表达式中被 0 除的结果是不确定的,将会导致运行时错误。 因此,以下表达式生成未定义的错误结果
i % 0
f / 0.0
如果取模表达式的两个操作数具有相同的符号,则结果为正。 否则,结果为负。 取模运算的符号的结果是实现定义的。
以下为ESP32S3取模运算的结果,示例列出了取模数字为2-5、10、20的程序及结果。
%2
printf("cnt: %d", cnt);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(GPIO_OUTPUT_IO_2, cnt % 2);
printf(" %d\n", cnt % 2);
cnt++ ;
任何数%2都可以检测是否为偶数,如果结果等于1则表示为奇数
这个可以干什么?可以点灯:)
还可以控制点灯的占空比_
cnt: 0 0
cnt: 1 1
cnt: 2 0
cnt: 3 1
cnt: 4 0
cnt: 5 1
cnt: 6 0
cnt: 7 1
cnt: 8 0
cnt: 9 1
cnt: 10 0
%3
printf("cnt: %d", cnt);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(GPIO_OUTPUT_IO_2, cnt % 3);
printf(" %d\n", cnt % 3);
cnt++ ;
cnt: 0 0
cnt: 1 1
cnt: 2 2
cnt: 3 0
cnt: 4 1
cnt: 5 2
cnt: 6 0
cnt: 7 1
cnt: 8 2
cnt: 9 0
cnt: 10 1
%4
int cnt = 0;
while (1) {
printf("cnt: %d", cnt);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(GPIO_OUTPUT_IO_2, cnt % 4);
printf(" %d\n", cnt % 4);
cnt++ ;
//gpio_set_level(GPIO_OUTPUT_IO_4, cnt % 2);
}
cnt: 0 0
cnt: 1 1
cnt: 2 2
cnt: 3 3
cnt: 4 0
cnt: 5 1
cnt: 6 2
cnt: 7 3
cnt: 8 0
cnt: 9 1
cnt: 10 2
cnt: 11 3
cnt: 12 0
cnt: 13 1
cnt: 14 2
cnt: 15 3
cnt: 16 0
cnt: 17 1
cnt: 18 2
%5
int cnt = 0;
while (1) {
printf("cnt: %d", cnt);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(GPIO_OUTPUT_IO_2, cnt % 5);
printf(" %d\n", cnt % 5);
cnt++ ;
//gpio_set_level(GPIO_OUTPUT_IO_4, cnt % 2);
}
cnt: 0 0
cnt: 1 1
cnt: 2 2
cnt: 3 3
cnt: 4 4
cnt: 5 0
cnt: 6 1
cnt: 7 2
cnt: 8 3
cnt: 9 4
cnt: 10 0
cnt: 11 1
cnt: 12 2
cnt: 13 3
cnt: 14 4
cnt: 15 0
cnt: 16 1
cnt: 17 2
cnt: 18 3
cnt: 19 4
cnt: 20 0
%10
int cnt = 0;
while (1) {
printf("cnt: %d", cnt);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(GPIO_OUTPUT_IO_2, cnt % 10);
printf(" %d\n", cnt % 10);
cnt++ ;
//gpio_set_level(GPIO_OUTPUT_IO_4, cnt % 2);
}
cnt: 0 0
cnt: 1 1
cnt: 2 2
cnt: 3 3
cnt: 4 4
cnt: 5 5
cnt: 6 6
cnt: 7 7
cnt: 8 8
cnt: 9 9
cnt: 10 0
cnt: 11 1
cnt: 12 2
cnt: 13 3
cnt: 14 4
cnt: 15 5
cnt: 16 6
cnt: 17 7
cnt: 18 8
cnt: 19 9
cnt: 20 0
cnt: 21 1
cnt: 22 2
cnt: 23 3
cnt: 24 4
cnt: 25 5
cnt: 26 6
cnt: 27 7
cnt: 28 8
cnt: 29 9
cnt: 30 0
cnt: 31 1
cnt: 32 2
cnt: 33 3
cnt: 34 4
cnt: 35 5
cnt: 36 6
cnt: 37 7
cnt: 38 8
cnt: 39 9
cnt: 40 0
cnt: 41 1
cnt: 42 2
cnt: 43 3
cnt: 44 4
cnt: 45 5
cnt: 46 6
cnt: 47 7
cnt: 48 8
cnt: 49 9
cnt: 50 0
%20
int cnt = 0;
while (1) {
printf("cnt: %d", cnt);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(GPIO_OUTPUT_IO_2, cnt % 20);
printf(" %d\n", cnt % 20);
cnt++ ;
}
cnt: 0 0
cnt: 1 1
cnt: 2 2
cnt: 3 3
cnt: 4 4
cnt: 5 5
cnt: 6 6
cnt: 7 7
cnt: 8 8
cnt: 9 9
cnt: 10 10
cnt: 11 11
cnt: 12 12
cnt: 13 13
cnt: 14 14
cnt: 15 15
cnt: 16 16
cnt: 17 17
cnt: 18 18
cnt: 19 19
cnt: 20 0
cnt: 21 1
cnt: 22 2
cnt: 23 3
cnt: 24 4
cnt: 25 5
cnt: 26 6
cnt: 27 7
cnt: 28 8
cnt: 29 9
cnt: 30 10
cnt: 31 11
cnt: 32 12
cnt: 33 13
cnt: 34 14
cnt: 35 15
cnt: 36 16
cnt: 37 17
cnt: 38 18
cnt: 39 19
cnt: 40 0
cnt: 41 1
cnt: 42 2
cnt: 43 3
cnt: 44 4
cnt: 45 5
cnt: 46 6
cnt: 47 7
cnt: 48 8
cnt: 49 9
cnt: 50 10
cnt: 51 11
cnt: 52 12
cnt: 53 13
cnt: 54 14
cnt: 55 15
cnt: 56 16
cnt: 57 17
cnt: 58 18
cnt: 59 19
cnt: 60 0
cnt: 61 1
cnt: 62 2
cnt: 63 3
cnt: 64 4