判断一个大于0的数是否是2的方幂

如何判断一个大于0的数是否为2的方幂呢?我们知道,如果一个数是2的幂次方,那么这个数转化为二进制数后,它有且仅有一位为1,那么该如何判断一个二进制数里面仅有一位为1呢,这时,我们自然而然地想到了遍历二进制数的每一位,看一下它是否为1,但是否有更简便的做法呢?

//判断一个数是否为2的方幂,如果是,它是多少次方

#include <stdio.h>
void Power(int n);

int main()
{
    int n = 1024;
    Power(n);
    return 0;
}
void Power(int n)
{
    int m = n;
    if(n > 0 && (n & (n - 1) )== 0)
    {
        int power = 0;
        while(n)
        {
            n >>= 1;
            ++power;
        }
        printf("%d是2的%d次方\n",m ,power - 1);
    }
    else
    {
        printf("%d不是2的幂次方\n", n); 
    }
}

在代码中,我们使用了与操作 n & (n - 1) 如果只有一个1,那么结果必然是0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在scipy.stats模块中,powerlaw.fit函用于拟合律分布的概率密度函。该函的输入参包括: - data:要拟合的据集 - floc:分布函的起始值,默认为0 - f0:分布函的归一化常,默认为1 该函返回一个元组,其中包含拟合结果的各个参,包括: - alpha:分布函的指,表示尾部分布的律指 - loc:分布函的位置参,表示分布函的起始位置 - xmin:分布函的下截断值,即尾部分布开始的位置 通过powerlaw.fit函的输出结果,可以判断一组据的尾部分布是否符合律分布,以及是否服从“负三次方定律”。 如果alpha参接近于3,且xmin参较小,说明据集的尾部分布符合律分布,并且服从“负三次方定律”。如果alpha参小于3,说明据集的尾部分布比律分布更陡峭;如果alpha参大于3,说明据集的尾部分布比律分布更平缓。xmin参的大小决定了分布函的尾部开始的位置,xmin越小,尾部分布越长。 因此,通过powerlaw.fit函的输出结果,可以对一组据的尾部分布进行分析和判断。例如,在金融领域中,利用该函可以判断某种资产的收益率分布是否符合律分布,并据此进行风险评估和投资决策。 以下是一个示例代码,通过powerlaw.fit函分析一组收益率据的尾部分布特征: ```python import numpy as np from scipy.stats import powerlaw import matplotlib.pyplot as plt # 假设我们有一组收益率据为returns returns = np.random.normal(0, 1, 10000) # 使用powerlaw函拟合据的分布规律 params = powerlaw.fit(returns, floc=0) # 输出拟合结果 print("alpha parameter = ", params[0]) print("xmin parameter = ", params[2]) # 绘制概率密度函图 pdf, bins, patches = plt.hist(returns, bins=50, density=True) plt.clf() plt.plot(bins[:-1], pdf) # 绘制律分布的概率密度函 x = np.linspace(0, 10, 100) y = powerlaw.pdf(x, params[0], loc=params[1], scale=params[2]) plt.plot(x, y, 'r--') plt.xlabel('Returns') plt.ylabel('PDF') plt.title('Probability Density Function of Returns') plt.show() ``` 在该示例代码中,我们使用powerlaw.fit函拟合一组随机生成的收益率据returns,并输出拟合结果。然后,我们绘制了收益率据的概率密度函图,并在该图上绘制了律分布的概率密度函。可以看到,拟合结果表明该组据的尾部分布符合律分布,alpha参接近于3,而xmin参较小,符合“负三次方定律”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值