KFIFO入门

https://blog.csdn.net/linyt/article/details/53355355 巧夺天工的kfifo(修订版)
https://blog.csdn.net/chen19870707/article/details/39899743 眉目传情之匠心独运的kfifo
https://www.cnblogs.com/suozhang/p/6373510.html 参考文章

第一个问题
//找出最接近 最大2的指数次幂
unsigned int roundup_pow_of_two(unsigned int date_roundup_pow_of_two )
{            
    /* 这里采用 STM32 硬件提供的计算前导零指令 CLZ
     * 举个例子,假如变量 date_roundup_pow_of_two 0x09
     *(二进制为:0000 0000 0000 0000 0000 0000 0000 1001), 即bit3和bit0为1
     * 则__clz( (date_roundup_pow_of_two)的值为28,即最高位1 前面有28个0,32-28 =3 代表最高位1 的 位置
     * 31UL 表示 无符号 int 数字 31,否则默认为 有符号 int 数字 31
     */

    return ( 1UL << ( 32UL - ( unsigned int ) __clz( (date_roundup_pow_of_two) ) ) );

}

第0个问题
关于求一个整数是否为2的幂,isPowerOfTwo()的分析
https://blog.csdn.net/OnionOmelette/article/details/53718623
如果一个数x为2的n次方,那这个数的二进制就只有一个位(记为m)为1,其他均为0。
并且有,x-1的二进制表现形式为:第m位为0,其余(0到m-1)位为1。
由此,恰恰好x跟x-1的按位或结果就是为0了,(x和x-1二进制的同一位置上均只有一个地方出现0)。
java:

boolean isPowerOfTwo(int num) {
return (num > 0) && (num & (num - 1)) == 0
}

回答第一个问题:
https://www.cnblogs.com/tangxin-blog/p/6131326.html
判断一个整数是否为2的幂 以及 上向2的幂扩展

uint32_t roundup_pow_of_two(const uint32_t x)
{
    if (x == 0){ return 0; }
    if (x == 1){ return 2; }
    uint32_t ret = 1;
    while (ret < x)
    {
        ret = ret << 1;
    }
    return ret;
}


非常好用!!!

char isPowerOfTwo(uint32_t num) 
{
	return (num > 0) && (num & (num - 1)) == 0
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值