广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c语言实现向上取整计算方法
  • 830
分享到

c语言实现向上取整计算方法

2024-04-02 19:04:59 830人浏览 八月长安
摘要

目录C语言向上取整计算c语言向上取整的一点技巧c语言向上取整计算 用整数N 除以 M,要求向上取整数 int n = (N + M -1) / M ; 简化后就是: int n= (

c语言向上取整计算

用整数N 除以 M,要求向上取整数

int n = (N + M -1) / M ;

简化后就是:

int n= (N - 1) / M +1;

最笨的办法

int n = N / M + ((N % M != 0) ? 1 : 0 )

c语言向上取整的一点技巧

做底层或者说驱动开发时,经常会遇到一些硬件限制,比如 STM32 有些寄存器要求 16 bit 访问、32 bit 访问,否则可能引发 Hardfault 中断;再比如擦除 flash 扇区时,会要求整块擦除。这些都是硬件决定的,必须这样做。

假设我们需要 32 bit 访问一个地址 dst 时,如果要写入 10 个字符(两次写入 8 字节,所以需要 3 次才能完全写入),一般我们是怎么做的呢?

char     *str = "0123456789";
uint32_t  len = strlen(str);
uint32_t *src = str; 
uint32_t *dst = 0x20000000; 
 
#define SIZE    (4) 
 
if((len % SIZE) != 0) // 判断是否整除
{
  len = len / SIZE + 1;
}
else
{
  len = len / SIZE;
} 
 
for(int i = 0; i < len; i++)
{
   dst [i] = src [i];  //  32 bit 访问
}

可以看到,上面的写法是最容易想到的一种,也是新手最常写的,但是有经验的老手会怎么写呢?

char     *str = "0123456789";
// 设置 10 字节写入,当然一般情况下是以函数参数的形式传入
uint32_t  len = strlen(str);
uint32_t *src = str; 
uint32_t *dst = 0x20000000; 
 
#define SIZE    (4) 
 
len = (len + SIZE - 1) / SIZE; 
 
for(int i = 0; i < len; i++)
{
   dst [i] = src [i];  //  32 bit 访问
}

len = (len + SIZE - 1) / SIZE;   //重点

就上面一条代码,简单高效直接。

一般看到这种代码,你就会觉得这个作者有水平,不会是新手。

事实上,鱼鹰看了不少开源代码,发现只要会这么操作的,代码水平一般不会太差的。当然不是说写出最上面代码的水平一定不怎么样,就像你不能说一个人写的字很难看,然后断定他作文水平不行是一样的道理。

只是能写出上面代码的,应该可以称之为经验丰富了吧。

继续探讨上面的代码。

你会发现上面的代码非常巧妙,写入长度 + 对齐长度 - 1,这样一来即使写入长度只多一个,也一定会导致最终结果 + 1,这样就巧妙的避免了 if 判断。

而且这条语句没有限制说一定是偶数或奇数,而是任意正整数(0 和 1 除外),可谓巧妙至极。

所以你进行固件升级时,如果要计算一共需要的扇区大小,不如使用该方式吧(当然对于扇区大小不同的不行)。这会让你的同事觉得你很有水平的。

向下取整就简单多了:

len /= SIZE;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: c语言实现向上取整计算方法

本文链接: https://www.lsjlt.com/news/164948.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言实现向上取整计算方法
    目录c语言向上取整计算c语言向上取整的一点技巧c语言向上取整计算 用整数N 除以 M,要求向上取整数 int n = (N + M -1) / M ; 简化后就是: int n= (...
    99+
    2022-11-13
  • C语言如何实现除法向上取整
    这篇文章将为大家详细讲解有关C语言如何实现除法向上取整,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。除法向上取整#define DIV_ROUND_UP(n,&...
    99+
    2022-10-19
  • C语言实现计算器的两种方法
    本文实例为大家分享了C语言实现计算器的具体代码,供大家参考,具体内容如下 C语言计算器两种方法 //一般做法 #include<stdio.h> #include<...
    99+
    2022-11-13
  • c语言取整和取余的方法是什么
    在C语言中,取整和取余可以使用以下方法:1. 取整:使用整除运算符(/)可以得到两个整数相除的商,如果操作数是整数类型,则结果也是整...
    99+
    2023-10-12
    c语言
  • C语言实现简单计算器
    本文实例为大家分享了C语言实现简单计算器的具体代码,供大家参考,具体内容如下 实现效果如图: 实现代码如下: #include<stdio.h> #include...
    99+
    2022-11-12
  • C语言实现个税计算器
    最近在学C语言基础,在导师的指导下,先准备写个个税薪资计算器。这是一个简单的C语言小demo。主要用到了C语言的函数,if选择语句。 程序的主要代码如下(可运行): #inclu...
    99+
    2022-11-12
  • C语言完整实现12种排序算法(小结)
    目录1.冒泡排序2.插入排序3.折半插入排序4.希尔排序5.选择排序6.鸡尾酒排序7.堆排序8.快速排序9.归并排序10.计数排序11.桶排序12.基数排序1.冒泡排序 思路:比较相...
    99+
    2022-11-13
  • C语言计算大数相加的方法
    本文实例为大家分享了C语言计算大数相加的具体代码,供大家参考,具体内容如下 问题描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 算法描述   由于a和b都比较...
    99+
    2022-11-12
  • C语言计算大数阶乘的方法
    本文实例为大家分享了C语言计算大数阶乘的具体代码,供大家参考,具体内容如下 问题描述 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 算法描述 n!可能很大,而计算...
    99+
    2022-11-12
  • 用C语言实现计算器功能
    本文实例为大家分享了用C语言实现计算器功能的具体代码,供大家参考,具体内容如下 代码如下: #include<stdio.h> //C语言编写计算器程序 ^_^ v...
    99+
    2022-11-12
  • 银行家算法 C语言实现
    以下是银行家算法在C语言中的实现:```c#include // 资源数量#define M 3// 进程数量#define N 5...
    99+
    2023-09-28
    C语言
  • C语言实现简易计算器功能
    本文实例为大家分享了C语言实现简易计算器功能的具体代码,供大家参考,具体内容如下 表达式求值项目(多功能计算器)。该项目主要包含了10个模块,10项功能: 1:加法运算:主要进行两个...
    99+
    2022-11-13
  • C语言实现扫雷小游戏完整算法详解(附完整代码)
    目录前言1.算法基本思路2.算法详解1.初始化数组与打印数组2.设置雷3.排查与标记4.CountMine函数计算周围雷的个数 5.ExpandMine函数递归展开周围所有...
    99+
    2022-11-13
  • C语言如何实现平方运算
    小编给大家分享一下C语言如何实现平方运算,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!平方运算a = pow...
    99+
    2022-10-19
  • c语言如何实现排序算法
    小编给大家分享一下c语言如何实现排序算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.选择排序-简单选择排序选择排序是最简单的一种基于O(n2)时间复杂度的排...
    99+
    2023-06-15
  • C语言怎么实现扫雷算法
    这篇文章主要讲解了“C语言怎么实现扫雷算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么实现扫雷算法”吧!扫雷分析从小到大你或许没玩过但一定听过的游戏——扫雷首先我们来分一下“扫雷...
    99+
    2023-06-20
  • C语言实现读取CSV文件的方法详解
    1、每一次只能读取同一种数据类型,不能读取字符串。 2、第次读取会返回一个 CSV数据结构,有源数据和二维数组,行列数信息 3、可以转换二维数组,但总大小不能变 123.csv M...
    99+
    2022-12-21
    C语言读取CSV文件 C语言读取CSV C语言 CSV
  • 五种C程序计算阶乘方法 c语言实现1到n的阶乘1*2*3*.....*n的累乘计算,使用不同方法实现,五种计算阶乘的方法
    题目: 题目分析:        首先要清楚阶乘定义,所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n,用公式表示就是:1×2×3×4×…×(n-2)×(n-1)×n=n! 具体的操作: 利用循环解决问题,设循环...
    99+
    2023-10-21
    c++ c语言 python java c#
  • C语言中四种取整方式,取余/取模运算以及负数取模问题详解
    目录零向取整、负无穷向取整、正无穷向取整、四舍五入取整总结零向取整、负无穷向取整、正无穷向取整、四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整...
    99+
    2022-11-12
  • C语言实现BF算法案例详解
    BF算法:        BF算法即暴风算法,是普通的模式匹配算法。BF算法的思想:将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作