【C语言笔记】【宏定义系列】 向下舍入到指定数值的倍数

宏定义系列内容。用于记录各式各样有用或者没用的宏定义☺。

宏定义说明

用于将一个数向下舍入到小于等于该数的指定数值的倍数。

例如一个要向下舍入的数是78,指定的数值为10,那么最后得到的数就是10的倍数,78向下舍入就是70。

例如一个要向下舍入的数是789,指定的数值为100,那么最后得到的数就是100的倍数,789向下舍入就是700。

例如一个要向下舍入的数是789,指定的数值为20,那么最后得到的数就是20的倍数,789向下舍入就是780。

该宏定义来自linux kernel 5.10。

实现代码

#define rounddown(x, y) (                \
{                           \typeof(x) __x = (x);              \__x - (__x % (y));             \
}                           \
)

宏定义中:

x表示要向下舍入的数值。

y表示的是用于舍入倍数的指定数值。

也就是将x向下舍入为小于等于x的y的倍数。

示例程序

示例程序用于得到789向下舍入100的倍数和20的倍数的情况,最后结果为700和780。

int main(int argc, char* argv[])
{int x, y;x = 789;y = 100;printf("rounddown : %d\n", rounddown(x, y));x = 789;y = 20;printf("rounddown : %d\n", rounddown(x, y));return 0;
}

实现过程

  1. typeof(x) __x = (x)

    使用一个与参数x相同数据类型的临时变量__x来保存参数x的值,避免类似自增或自减带来的影响。

  2. __x - (__x % (y))

    1)先计算__x % (y),得到x除以y的余数。

    2)再用x减去上一步得到的余数,得到的就是向下舍入的数值。

[参考资料]

linux kernel 5.10


本文链接:https://blog.csdn.net/u012028275/article/details/118068422

【C语言笔记】【宏定义系列】 向下舍入到指定数值的倍数相关推荐

  1. 【C语言笔记】【宏定义系列】 绝对值

    [C语言笔记][linux宏定义系列] 绝对值 abs linux宏定义系列内容.用于记录在linux之中各式各样的宏定义☺. 宏定义说明 用于计算数值的绝对值,支持有符号和无符号的long,int, ...

  2. 【C语言笔记】【宏定义系列】 整数乘以分数

    [C语言笔记][linux宏定义系列] 整数乘以分数 mult_frac linux宏定义系列内容.用于记录在linux kernel之中各式各样的宏定义☺. 宏定义说明 用于将整数乘以分数.可以避免 ...

  3. 【C语言笔记】【宏定义系列】 向上取整到指定数值的倍数

    [C语言笔记][宏定义系列] 向上取整到指定数值的倍数 宏定义系列内容.用于记录各式各样有用或者没用的宏定义☺. 宏定义说明 用于将一个数向上取整到大于等于该数的指定数值的倍数. 例如一个要向上取整的 ...

  4. C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解

    宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名.给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很 ...

  5. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  6. c语言用宏定义常量_使用宏定义常量以在C的数组声明中使用

    c语言用宏定义常量 As we know that, while declaring an array we need to pass maximum number of elements, for ...

  7. c语言中宏定义的字符替换#define M(x,y,z) x*y+z

    C语言中宏定义的字符替换问题 例子: 在c语言中定义如下宏 #define M(x,y,z) x*y+z 给定如下程序 #include<stdio.h> #include<stdl ...

  8. c语言数组宏定义标识符,C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针...

    目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...

  9. C语言学习笔记-宏定义-SWAP交换两个变量值

    面试中经常考到的一个题.原理跟 a=a+b;   b=a-b;  a=a-b;  一样的,很简单,不解释. //宏定义 交换两个变量的值.使用异或运算. #define SWAP(a,b) {a=a^ ...

最新文章

  1. DeepSpeed超大规模模型训练工具
  2. ASP.NET设计应用程序的七大绝招
  3. C语言之free函数及野指针
  4. 红帽中出现”This system is not registered with RHN”的解决方案
  5. maven引用公共包_Maven项目怎样引用其他项目/或者jar包-阿里云开发者社区
  6. 这个省3月23日开始错时错峰开学,在校不要求戴口罩!
  7. stl字符串去除空格_在列表中推送字符并在C ++ STL中将它们打印为空格
  8. 信息学奥赛一本通(1187:统计字符数)
  9. python-演练-输出一个等腰三角形-
  10. Linux puppet的安装配置部署
  11. java连接redis不稳定_java相关:jedispool连redis高并发卡死的问题
  12. 机器学习实践中的 7 种常见错误
  13. 143.根据文件头判断类型
  14. 安卓系统抓包工具大全
  15. VC6.0中使用64位整型
  16. P8700和T9600对比测试
  17. 如何把苹果文件APP里的Word文档传到手机备忘录
  18. 给出一个正整数,求出它是几位数,逆序输出各位数字,顺序输出各位数字。
  19. 力天创见热区统计方案
  20. 2018-2019-2 20175317 实验三《敏捷开发与XP实践》实验报告

热门文章

  1. 020 怎样才可以把py文件前面的小箭头去掉
  2. PYNQ实验二:音频播放
  3. 利用cpolar远程登录公司OA系统
  4. 春夏秋冬又一春之Redis持久化
  5. windows 安装apex_apex 安装/使用 记录
  6. 计算机应用基础18秋在线作业2奥鹏,奥鹏15春北航《计算机应用基础》在线作业2答案...
  7. 天嵌i.mx6q--1
  8. 【uniapp小程序】路由跳转navigator传参封装
  9. C++中文件开头写的 using namespace std 有什么作用?
  10. 满分的一份软件测试工程师简历,凭什么?