当前位置: 首页 > news >正文

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


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


文章目录

    • 背景
      • 示例

背景

有些文件每行是固定的字符个数,那么如果任意给个字符的序号,怎么通过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行。

http://www.lryc.cn/news/329142.html

相关文章:

  • C++入门知识详细讲解
  • pytorch中的torch.hub.load():以vggish为例
  • mysql 用户管理-权限管理
  • RabbitMQ--04--发布订阅模式 (fanout)-案例
  • 基于java+SpringBoot+Vue的网上书城管理系统设计与实现
  • PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)
  • 通过WSL在阿里云上部署Vue项目
  • 240330-大模型资源-使用教程-部署方式-部分笔记
  • uni-app 富文本编辑器
  • 3D汽车模型线上三维互动展示提供视觉盛宴
  • 如何在Flutter中进行网络请求?
  • node:ReferenceError: XMLHttpRequest is not defined
  • PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)
  • 图腾柱PFC:HP1010为您的电动两轮车之旅提供绿色,高效,安全的动力
  • 动态规划-----背包类问题(0-1背包与完全背包)详解
  • 通过 Docker 搭建 BookStack
  • 通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?
  • [k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)
  • java中的static和单例模式
  • RabbitMQ相关总结
  • RAFT: Adapting Language Model to Domain Specific RAG
  • 第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯
  • 第四题:星期一
  • Mamba: Linear-Time Sequence Modeling with Selective State Spaces(论文笔记)
  • 2024蓝桥杯每日一题(区间DP)
  • LeetCode-2952. 需要添加的硬币的最小数量【贪心 数组 排序】
  • 新书速递——《可解释AI实战(PyTorch版)》
  • 国产数据库中统计信息自动更新机制
  • 【C++】入门C++(中)
  • javaIO