zoukankan      html  css  js  c++  java
  • uboot代码阅读之向下舍入到指定数值的倍数/向上取整到指定数值的倍数

    top = rounddown(top-sizeof(struct global_data), 16);
    
    //其中
    #define rounddown(x, y) (                \
    {                            \
        typeof(x) __x = (x);                \
        __x - (__x % (y));                \
    }                            \
    )

    宏定义中:

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

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

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

    实现过程
    typeof(x) __x = (x)

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

    __x - (__x % (y))

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

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

    eg:

    round(66, 20) =66 - (66 % 20)= 66 - 6 = 60

    round(100, 20) = 100 - (100 % 20)= 100 - 0 = 100


    ————————————————
    版权声明:本文为CSDN博主「dadalaohua」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u012028275/article/details/118068422

    ——————————————————————————————————————————————————————————————————————————————————————————***************************************************************************************************************************************************************************************************************************************

    roundup(sizeof(struct global_data), 16);
    
    //其中
    /* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */
    #define roundup(x, y) (                    \
    {                            \
        const typeof(y) __y = y;            \
        (((x) + (__y - 1)) / __y) * __y;        \
    }                            \
    )

    宏定义中:

    x表示要向上取整的数值。

    y表示的是用于取整倍数的指定数值。

    也就是将x向上取整为大于等于x的y的倍数。

    实现过程

    1、typeof(y) __y = y

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

    2、(((x) + (__y - 1)) / __y) * __y

    该行代码写成公式就是( x + ( y − 1 ) ) / y × y

    1)先计算(x) + (__y - 1),我们假设向上取整的数值为n × y,是y的n倍,假设得到的数值为k, 那么得到的数值k的范围将是n × y ≤ k < (n + 1) × y,大于等于向上取整的数值,小于指定数值与取整倍数加1相乘的数。

    2) 然后/ __y,得到的数除以y,得到的就是倍数。

    3)然后倍数乘以y,就得到了向上取整的数。

    eg:

    round(1066, 100) = (1066 + (100-1))/100 * 100 = 1165 / 100 *100 = 11*100=1100

    round(1100, 100) = (1100 + (100-1))/100 * 100 = 1199 / 100 *100 = 11*100=1100


    ————————————————
    版权声明:本文为CSDN博主「dadalaohua」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u012028275/article/details/118068412

  • 相关阅读:
    a.default.ERROR.httpAjax is not a function
    Java heap space
    jmeter
    sql注入
    数据库查前三名
    maven
    国际化变现应用分析
    百度应用部署秘籍
    如何建立起一套有效的APP监控体系
    第三方舆情收集与质量闭环建设
  • 原文地址:https://www.cnblogs.com/keepdoing123/p/15554023.html
Copyright © 2011-2022 走看看