台灣最大程式設計社群網站
線上人數
1825
 
會員總數:242275
討論主題:187366
歡迎您免費加入會員
討論區列表 >> VB.NET >> 判斷2的次方
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
判斷2的次方
價值 : 300 QP  點閱數:165 回應數:8

樓主

練武功
中級專家
2118 1
531 151
發送站內信



有無快速又簡易的方法以判斷某數為2的次方?例如:1024是2的次方,1000不是2的次方。


搜尋相關Tags的文章: [ 2次方 ] ,
本篇文章發表於2018-03-16 19:03
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

香帥
檢舉此回應
程式碼如下請參考

本篇文章回覆於2018-03-16 21:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

練武功
檢舉此回應
謝謝回覆。
但這種方法無法判斷所有的2的次方,只能判斷兩個相同數的相乘。
如以9來判斷,回傳值也是True,因為9=3*3。
而1024回傳值為True,因為1024=32*32。
本篇文章回覆於2018-03-16 22:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Ader Chen
檢舉此回應

不好意思, 香帥前輩的程式好像是在檢查是否為某數的平方?
例如若傳入 10000 (100的平方), 會傳回 True, 而 10000 不是 2 的某次方.

或可參考看看下面的 PowerOf2 函式:

本篇文章回覆於2018-03-16 22:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

練武功
檢舉此回應
謝謝回覆
這確實可以找出是否為2的次方。
但可否還有其他的方法?
我曾在網路上看到以二進位的概念來判斷,但不知VB該如何寫呢?
本篇文章回覆於2018-03-16 22:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

誰是誰
檢舉此回應
只有一個 bit 為 1, 其他所有 bits 為 0, 就是 2 的 0~n次方 (unsinged 狀況, 如果是 signed 就要另外考慮), 以下是 C# 範例

本篇文章回覆於2018-03-16 23:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

Ader Chen
檢舉此回應

有想過另一種方式:
先轉為二進制字串, 最左邊是 "1", 其他都不是 "1" 的就是 2 的 N次方,

方法例如 Convert.ToString(1024, 2) -> "10000000000"
"10000000000" -> True
"1" -> True
"10" -> True
"11" -> False
"110" -> false
"1000000" -> True
"1000001" -> False

(我個人比較喜歡上面數學方法, 就沒寫這種數值轉字串再比對"1"的方法)
本篇文章回覆於2018-03-16 23:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

誰是誰
檢舉此回應
XD, 同一分鐘貼文
本篇文章回覆於2018-03-16 23:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
最有價值解答

Ader Chen
檢舉此回應

前面慢了前輩幾秒鐘...
(VB.NET)另一種方式:

本篇文章回覆於2018-03-16 23:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.