【ARM 嵌入式 C 入门及渐进 14 -- C 代码中取余与取模的使用介绍】

本文介绍了如何使用C语言中的取余和整数除法计算给定字符在每行固定字符数文件中的行号,以及根据字符数量确定需要拷贝的行数。通过两个函数实例演示了这两个问题的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


请阅读【嵌入式开发学习必备专栏 】


文章目录

背景

有些文件每行是固定的字符个数,那么如果任意给个字符的序号,怎么通过C 代码获取该字符所在的行呢?
处理这个问题就要用到 C 语言中的取余和取模运算了。

示例

在 C 语言中,可以通过以下函数实现根据给定的起始位 start_bit 计算它所在的行号(假设每行有固定的32个字符)。我们可以假设每个字符占用1个位,即每行32位。函数将返回计算出的行号,其中行号从1开始计数。

#include <stdio.h>
// 函数声明
int calculate_line_number(int start_bit);
int main(void) 
{
    int start_bit = 65; // 示例:查找第65位所在的行
    int line_number = calculate_line_number(start_bit);
    
    printf("The bit at position %d is on line %d.\n", start_bit, line_number);
    return 0;
}
// 函数定义
int calculate_line_number(int start_bit) 
{
    const int bits_per_line = 32; // 每行32个字符,假设每个字符占用1个位
    int line_number;
    // 计算行号,从1开始计数
    line_number = (start_bit / bits_per_line) + ((start_bit % bits_per_line) > 0 ? 1 : 0);
    return line_number;
}

在这个函数中,我们首先定义了每行的位数 bits_per_line 为32。我们使用整数除法 start_bit / bits_per_line 来计算基本的行数,并使用取余运算符 % 检查是否有额外的位数,如果有,表明 start_bit 位于下一行,因此行号需要加1。

这里的主要逻辑是,如果 start_bit 正好是 bits_per_line (32) 的倍数,它将位于 start_bit / bits_per_line 的行,否则位于 start_bit / bits_per_line + 1 的行。

main 函数中,我们调用 calculate_line_number 函数并传入示例起始位 65,然后打印出结果。按照这个逻辑,位65将位于第3行,因为 65 / 32 的商是2,余数是1,所以它位于第2行的下一行,即第3行。

假设给定字符长度为 bits_len,若要将这些字符全部拷贝 需要拷贝多少行数据?

可以编写如下函数:

#include <stdio.h>
// 函数声明
int calculate_lines_to_copy(int bits_len);
int main(void) 
{
    int bits_len = 65; // 示例:需要拷贝的字符数
    int lines_to_copy = calculate_lines_to_copy(bits_len);
    
    printf("Need to copy %d lines for %d characters.\n", lines_to_copy, bits_len);
    return 0;
}
// 函数定义
int calculate_lines_to_copy(int bits_len) {
    const int chars_per_line = 32; // 每行固定32个字符
    int lines;
    // 计算需要拷贝的行数
    lines = bits_len / chars_per_line;
    
    // 如果 bits_len 不是 chars_per_line 的整数倍,则需要多拷贝一行
    if (bits_len % chars_per_line != 0) {
        lines++;
    }
    return lines;
}

在这个函数 calculate_lines_to_copy 中,我们定义了每行的字符数 chars_per_line 为32。函数使用整数除法 bits_len / chars_per_line 来计算基本的行数,并使用取余运算符 % 检查是否有剩余的字符,如果有,表明 bits_len 超出了整数行,因此需要额外拷贝一行。

main 函数中,我们调用 calculate_lines_to_copy 函数并传入示例长度 65,然后打印出需要拷贝的行数。按照这个逻辑,对于65个字符,需要拷贝的行数将是3行,因为 65 / 32 的商是2,余数是1,所以需要在第2行的基础上再加1行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公讲 ARM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值