最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何判斷一個數(shù)是否為4的冪次方?若是,并判斷出來是多少次方?

 更新時間:2013年05月24日 10:32:23   作者:  
本篇文章是對如何判斷一個數(shù)是否為4的冪次方?若是,并判斷出來是多少次方的實現(xiàn)方法,進行了詳細的分析介紹,需要的朋友參考下
將4的冪次方寫成二進制形式后,很容易就會發(fā)現(xiàn)有一個特點:二進制中只有一個1(1在奇數(shù)位置),并且1后面跟了偶數(shù)個0; 因此問題可以轉(zhuǎn)化為判斷1后面是否跟了偶數(shù)個0就可以了。
4的整數(shù)次冪的二進制數(shù)都為 (4)100、(16)10000、(64)1000000......
另外,4的冪次方4^n也可以寫為2^(2*n),即也可以寫為2的冪次方,當(dāng)然就滿足2的冪次方的條件了,即num & num-1==0。
思路:首先用條件num & num-1==0來判斷是否為2的冪次方,若不滿足,則不是。若滿足,在用條件num & 0x55555555來判斷,若為真,則這個整數(shù)是4的冪次方,否則不是。
使用遞歸來實現(xiàn)的代碼如下:
復(fù)制代碼 代碼如下:

#include "stdio.h"
#include "stdlib.h"
bool fn(unsigned int x)      //判斷x是否是4的冪次方
{
  if ( x & (x - 1) )         //判斷x是否為2的冪次方
   return false;
  return x & 0x55555555;     //判斷1是否在奇數(shù)位置上
}
int log4(int value)      //遞歸判斷一個數(shù)是4的多少次方
{
 if (value == 1)
  return 0;
 else
 {
  value>>=1;       //往右移位
  return 1+log4(value>>1);       //往右移位
 }
}
int main(void)
{
 int num;
 printf("請輸入一個整數(shù):");
 scanf("%d",&num);
 if(fn(num))     //使用與運算判斷一個數(shù)是否是2的冪次方
  printf("%d是4的%d次方!\n",num,log4(num));
 else
  printf("%d不是4的冪次方!\n",num);
 system("pause");
 return 0;
}

使用非遞歸來實現(xiàn)的代碼如下:
復(fù)制代碼 代碼如下:

#include "stdio.h"
#include "stdlib.h"
bool fn(unsigned int x)      //判斷x是否是4的冪次方
{
  if ( x & (x - 1) )         //判斷x是否為2的冪次方
   return false;
  return x & 0x55555555;     //判斷1是否在奇數(shù)位置上
}
int log4(int value)   //非遞歸判斷一個數(shù)是4的多少次方  
{
 int x=0;
 while(value>1)
 {
  value>>=1;      //往右移位
  value>>=1;
  x++;
 }
 return x;

int main(void)
{
 int num;
 printf("請輸入一個整數(shù):");
 scanf("%d",&num);
 if(fn(num))     //使用與運算判斷一個數(shù)是否是2的冪次方
  printf("%d是4的%d次方!\n",num,log4(num));
 else
  printf("%d不是4的冪次方!\n",num);
 system("pause");
 return 0;
}

相關(guān)文章

  • VisualStudio2022配置opencv的實現(xiàn)

    VisualStudio2022配置opencv的實現(xiàn)

    本文主要介紹了VisualStudio2022配置opencv的實現(xiàn),文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • C/C++實現(xiàn)八大排序算法匯總

    C/C++實現(xiàn)八大排序算法匯總

    這篇文章主要為大家詳細介紹了C/C++實現(xiàn)八大排序算法匯總,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C++運算符重載的詳細講解

    C++運算符重載的詳細講解

    這篇文章主要給大家介紹了關(guān)于C++運算符重載的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Matlab控制電腦攝像實現(xiàn)實時人臉檢測和識別詳解

    Matlab控制電腦攝像實現(xiàn)實時人臉檢測和識別詳解

    人臉識別過程主要由四個階段組成:人臉檢測、圖像預(yù)處理、面部特征提取和特征識別。這篇文章主要介紹了如何使用MATLAB控制筆記本電腦的攝像頭,并進行實時人臉檢測和識別,需要的可以參考一下
    2022-10-10
  • Qt QThreadPool線程池的實現(xiàn)

    Qt QThreadPool線程池的實現(xiàn)

    QThreadPool管理和重新設(shè)計單個QThread對象,以幫助降低使用線程的程序中的線程創(chuàng)建成本,本文主要介紹了Qt QThreadPool線程池的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2007-03-03
  • C++中多態(tài)的定義及實現(xiàn)詳解

    C++中多態(tài)的定義及實現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于C++中多態(tài)的定義及實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • vscode+qt5+cmake編譯調(diào)試過程解析

    vscode+qt5+cmake編譯調(diào)試過程解析

    這篇文章主要介紹了vscode+qt5+cmake編譯調(diào)試過程解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 使用C++制作GC Server過程詳解

    使用C++制作GC Server過程詳解

    這篇文章主要介紹了使用C++制作GC Server過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • C++結(jié)構(gòu)體字節(jié)對齊和共用體大小

    C++結(jié)構(gòu)體字節(jié)對齊和共用體大小

    這篇文章主要介紹了C++結(jié)構(gòu)體字節(jié)對齊和共用體大小,結(jié)構(gòu)體內(nèi)存對齊在筆試和面試中經(jīng)常被問到,所以這篇文章做個總結(jié),首先通過代碼驗證不同結(jié)構(gòu)體的內(nèi)存大小,需要的朋友可以參考下
    2021-11-11
  • 手把手帶你學(xué)習(xí)C++的運算符

    手把手帶你學(xué)習(xí)C++的運算符

    這篇文章主要為大家介紹了C++運算符,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11

最新評論

防城港市| 茌平县| 永新县| 桃园县| 黑水县| 个旧市| 久治县| 定西市| 手机| 剑阁县| 昆明市| 同德县| 麻江县| 丹寨县| 绵阳市| 芜湖市| 古交市| 张家界市| 隆昌县| 连云港市| 承德县| 岳池县| 长乐市| 临城县| 县级市| 谷城县| 称多县| 新乡县| 溧阳市| 正镶白旗| 澄迈县| 呼伦贝尔市| 谢通门县| 大洼县| 应城市| 深水埗区| 永城市| 苗栗市| 诏安县| 时尚| 汉川市|