欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2013年05月24日 10:32:23   作者:  
本篇文章是對如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來是多少次方的實(shí)現(xiàn)方法,進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
將4的冪次方寫成二進(jìn)制形式后,很容易就會發(fā)現(xiàn)有一個(gè)特點(diǎn):二進(jìn)制中只有一個(gè)1(1在奇數(shù)位置),并且1后面跟了偶數(shù)個(gè)0; 因此問題可以轉(zhuǎn)化為判斷1后面是否跟了偶數(shù)個(gè)0就可以了。
4的整數(shù)次冪的二進(jìn)制數(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來判斷,若為真,則這個(gè)整數(shù)是4的冪次方,否則不是。
使用遞歸來實(shí)現(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)      //遞歸判斷一個(gè)數(shù)是4的多少次方
{
 if (value == 1)
  return 0;
 else
 {
  value>>=1;       //往右移位
  return 1+log4(value>>1);       //往右移位
 }
}
int main(void)
{
 int num;
 printf("請輸入一個(gè)整數(shù):");
 scanf("%d",&num);
 if(fn(num))     //使用與運(yùn)算判斷一個(gè)數(shù)是否是2的冪次方
  printf("%d是4的%d次方!\n",num,log4(num));
 else
  printf("%d不是4的冪次方!\n",num);
 system("pause");
 return 0;
}

使用非遞歸來實(shí)現(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)   //非遞歸判斷一個(gè)數(shù)是4的多少次方  
{
 int x=0;
 while(value>1)
 {
  value>>=1;      //往右移位
  value>>=1;
  x++;
 }
 return x;

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

相關(guān)文章

  • c++引用傳參和指針傳參的區(qū)別及說明

    c++引用傳參和指針傳參的區(qū)別及說明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • C語言 指針的初始化賦值案例詳解

    C語言 指針的初始化賦值案例詳解

    這篇文章主要介紹了C語言 指針的初始化賦值案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 深入內(nèi)存對齊的詳解

    深入內(nèi)存對齊的詳解

    本篇文章是對內(nèi)存對齊進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++之&與*符號用法案例詳解

    C++之&與*符號用法案例詳解

    這篇文章主要介紹了C++之&與*符號用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C語言基于回溯算法解決八皇后問題的方法

    C語言基于回溯算法解決八皇后問題的方法

    這篇文章主要介紹了C語言基于回溯算法解決八皇后問題的方法,簡單描述了八皇后問題,并結(jié)合實(shí)例形式分析了C語言使用回溯算法解決八皇后問題的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • C語言直接選擇排序算法詳解

    C語言直接選擇排序算法詳解

    直接選擇排序就是遍歷整個(gè)數(shù)組,每遍歷一遍的目的是找出該數(shù)組中的最大數(shù)和最小數(shù)對應(yīng)的下標(biāo),然后將最小數(shù)和數(shù)組的第一個(gè)數(shù)進(jìn)行交換,最大數(shù)和數(shù)組的最后一個(gè)數(shù)進(jìn)行交換,然后縮小范圍再次遍歷
    2022-08-08
  • 深入分析:C++模板究竟會使代碼膨脹嗎

    深入分析:C++模板究竟會使代碼膨脹嗎

    今天和同事說到C++模板會使代碼膨脹, 可同事覺得不會。 同事的依據(jù)是: 如果模板會使代碼膨脹, 那么ATL和WTL里為什么還要大量使用模板? 同樣功能 ,ATL和WTL編譯出的可執(zhí)行文件可比MFC編譯的要小的多
    2013-04-04
  • C++實(shí)現(xiàn)并查集

    C++實(shí)現(xiàn)并查集

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)并查集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 簡易Dota改鍵外掛程序制作

    簡易Dota改鍵外掛程序制作

    利用全局鉤子制作一個(gè)個(gè)性化的dota游戲改鍵功能,大家可以參考使用
    2013-11-11
  • C++如何判斷一個(gè)數(shù)是不是素?cái)?shù)

    C++如何判斷一個(gè)數(shù)是不是素?cái)?shù)

    這篇文章主要介紹了C++如何判斷一個(gè)數(shù)是不是素?cái)?shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論