日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab获取2的整数次幂,如何快速判断正整数是2的N次幂

發(fā)布時(shí)間:2024/3/13 循环神经网络 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab获取2的整数次幂,如何快速判断正整数是2的N次幂 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這個(gè)問(wèn)題可能很多面試的人都遇到過(guò),很多人可能想利用循環(huán)來(lái)判斷,代碼可能如下所示: public static boolean isPowOfTwo(int n) {

int temp = 0;

for (int i = 1; ; i++) {

temp = (int) Math.pow(2, i);

if (temp >= n)

break;

}

if (temp == n) return true;

else return false;

}

上面的代碼簡(jiǎn)單明了。但是,這樣的方案效率比較低。我們仔細(xì)分析一下,正整數(shù)是2的n次冪他有什么規(guī)律?20=1,21=2,22=4,23=8....這樣看是沒有什么規(guī)律的。但是如果將2的冪次方寫成二進(jìn)制形式后,很容易就會(huì)發(fā)現(xiàn)有以下兩個(gè)特點(diǎn):

1、20=1 -> 0001,21=2 -> 0010,22=4?->? 0100,23=8 ?->?1000二進(jìn)制中只有一個(gè)1,并且1后面跟了n個(gè)0。

2、如果將這個(gè)數(shù)減去1后會(huì)發(fā)現(xiàn),僅有的那個(gè)1會(huì)變?yōu)?,而原來(lái)的那n個(gè)0會(huì)變?yōu)?;因此將原來(lái)的數(shù)與去減去1后的數(shù)字進(jìn)行與運(yùn)算后會(huì)發(fā)現(xiàn)為零((x & x- 1) == 0)。

原因:因?yàn)?n換算是二進(jìn)制為10……0這樣的形式,2n-1的二進(jìn)制為0111...1,兩個(gè)二進(jìn)制求與結(jié)果為0,例如:16的二進(jìn)制為10000;15=01111,兩者相與的結(jié)果為0。計(jì)算如下:

10000

&01111

-------

00000

所以可以用下面 public static boolean isPowerOfTwo(int x) {

return x > 0 & (x & (x - 1)) == 0;

}

很簡(jiǎn)單的一行代碼就實(shí)現(xiàn)了。細(xì)心的讀者可能會(huì)問(wèn):2的n次冪二進(jìn)制始終都是只有一個(gè)1,其它的位數(shù)都為0,是否可以判斷給定的數(shù)轉(zhuǎn)換為二進(jìn)制來(lái)判斷其中是否只有1個(gè)1來(lái)得出給定數(shù)是否為2的n次冪呢?答案是不能。因?yàn)镮nteger.MIN_VALUE的二進(jìn)制只有1個(gè)1,但是Integer.MIN_VALUE并不是2的n次冪,所以不能用上面方式來(lái)實(shí)現(xiàn)。(完)

總結(jié)

以上是生活随笔為你收集整理的matlab获取2的整数次幂,如何快速判断正整数是2的N次幂的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。