Bootstrap

C语言取模运算(取余运算)“%“运算符,不是布尔指令,cnt % 2 可以用来点灯

取模(除法运算的余数)(%)

取模运算符产生下列表达式给定的余数,其中 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++ ;

C语言取模

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

;