当前位置: 首页 > 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行。

相关文章:

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

请阅读【嵌入式开发学习必备专栏 】 文章目录 背景示例 背景 有些文件每行是固定的字符个数&#xff0c;那么如果任意给个字符的序号&#xff0c;怎么通过C 代码获取该字符所在的行呢&#xff1f; 处理这个问题就要用到 C 语言中的取余和取模运算了。 示例 在 C 语言中&…...

C++入门知识详细讲解

C入门知识详细讲解 1. C简介1.1 什么是C1.2 C的发展史1.3. C的重要性1.3.1 语言的使用广泛度1.3.2 在工作领域 2. C基本语法知识2.1. C关键字(C98)2.2. 命名空间2.2 命名空间使用2.2 命名空间使用 2.3. C输入&输出2.4. 缺省参数2.4.1 缺省参数概念2.4.2 缺省参数分类 2.5. …...

pytorch中的torch.hub.load():以vggish为例

pytorch提供了torch.hub.load()函数加载模型&#xff0c;该方法可以从网上直接下载模型或是从本地加载模型。官方文档 torch.hub.load(repo_or_dir, model, *args, sourcegithub, trust_repoNone, force_reloadFalse, verboseTrue, skip_validationFalse, **kwargs)参数说明&a…...

mysql 用户管理-权限管理

学习了用户管理&#xff0c;再学习下权限管理。 3&#xff0c;权限管理 权限管理主要是对登录到MySQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中&#xff0c;不合理的权限规划会给MySQL服务器带来安全隐患。数据库管理员要对所有用户的权限进行合理规…...

RabbitMQ--04--发布订阅模式 (fanout)-案例

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 发布订阅模式 (fanout)---案例前言RabbitListener和RabbitHandler的使用 1.通过Spring官网快速创建一个RabbitMQ的生产者项目2.导入项目后在application.yml文件中配…...

基于java+SpringBoot+Vue的网上书城管理系统设计与实现

基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 网上书城管理系统是一个基于互联网的在线购书平台&#…...

PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)

PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十五六) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 写论文当然用RANSAC的优化变种算法MSAC啊,RANSAC太土太LOW了哈哈 MSAC算法(M-estimator Sample Consensus)是RANSAC(Random Sample Consensus)的一种…...

通过WSL在阿里云上部署Vue项目

参考&#xff1a; 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统&#xff0c;还有其他的进入方式。 选择ubuntu系统&#xff08;和WSL使用相同的系统&#xff09;。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…...

240330-大模型资源-使用教程-部署方式-部分笔记

A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门&#xff08;一&#xff09;&#xff0c;利用Transformers&#xff0c;Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…...

uni-app 富文本编辑器

<template><view class"container"><view>标题&#xff1a;<u-input placeholder"请输入标题"></u-input></view><view class"page-body"><view classwrapper><view classtoolbar tap"…...

3D汽车模型线上三维互动展示提供视觉盛宴

VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代&#xff0c;它不仅颠覆了传统展览的局限&#xff0c;还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理&#xff0c;这一在线展…...

如何在Flutter中进行网络请求?

Hello&#xff01;大家好&#xff0c;我是咕噜铁蛋&#xff0c;你们的好朋友&#xff01;今天&#xff0c;我想和大家分享一下在Flutter中如何进行网络请求。Flutter作为一个跨平台的开发框架&#xff0c;网络请求是其实现数据交互的重要一环。下面&#xff0c;我将详细介绍几种…...

node:ReferenceError: XMLHttpRequest is not defined

node&#xff1a;ReferenceError: XMLHttpRequest is not defined 1 前言 node执行如下代码&#xff1a; new XMLHttpRequest()报错提示&#xff1a;ReferenceError: XMLHttpRequest is not defined 2 解决 2.1 可能原因是没有安装xmlhttprequest npm install xmlhttpreq…...

PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)

TaskPHP是一个基于PHP的定时任务框架&#xff0c;它提供了一个简单、灵活且易于使用的解决方案&#xff0c;用于在PHP环境中执行定时任务。下面是对TaskPHP框架的简要介绍&#xff1a; 简单易用&#xff1a;TaskPHP的设计目标是让定时任务的创建和管理变得简单。通过简单的配置…...

图腾柱PFC:HP1010为您的电动两轮车之旅提供绿色,高效,安全的动力

电动两轮车不仅为当今生活提供了便利&#xff0c;更是一种健康和绿色的出行方式。想象一下&#xff0c;在经过一整晚的充分休息&#xff0c;骑上爱车&#xff0c;满血复活的准备开始新的一天。您会愿意带着如何给心爱的两轮车充电的担心开始这一天吗&#xff1f; 随着越来越…...

动态规划-----背包类问题(0-1背包与完全背包)详解

目录 什么是背包问题&#xff1f; 动态规划问题的一般解决办法&#xff1a; 0-1背包问题&#xff1a; 0 - 1背包类问题 分割等和子集&#xff1a; 完全背包问题&#xff1a; 完全背包类问题 零钱兑换II: 什么是背包问题&#xff1f; 背包问题(Knapsack problem)是一种…...

通过 Docker 搭建 BookStack

文章目录 环境说明1、官方网站2、通过 Docker 部署总结 环境说明 操作系统版本&#xff1a;CentOS Linux release 7.9.2009 (Core) Docker 版本&#xff1a;Docker Engine - Community 24.0.2 BookStack 版本&#xff1a;23.02.3 MySQL 版本&#xff1a;8.0.32 1、官方网站 G…...

通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?

Java虚拟机&#xff08;Java Virtual Machine, JVM&#xff09;是一种软件实现的抽象计算机&#xff0c;它负责执行Java字节码&#xff08;Bytecode&#xff09;。Java程序并不是直接在物理计算机上运行&#xff0c;而是先由Java编译器将源代码编译成与平台无关的字节码&#x…...

[k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)

使用Shell脚本实现功能&#xff1a; kubectl执行失败后&#xff0c;等待30秒后再重试&#xff0c;一共重试3次&#xff0c;代码如下&#xff1a; #!/bin/bashKUBECTL_BIN/var/lib/snapd/snap/bin/kubectlERR_MSG_K8S_NOTRUNNING"microk8s is not running" ERR_MSG_C…...

java中的static和单例模式

同一个类中&#xff0c;访问其类成员&#xff0c;可以省略类名不写 static&#xff1a;叫静态&#xff0c;可以修饰成员变量&#xff0c;成员方法。 成员变量按照有无static修饰&#xff0c;分为两种&#xff1a; 类变量&#xff1a;有static修饰&#xff0c;属于类&#xf…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...