簡體   English   中英

如何檢查文本文件中的行數是否為 2 的冪?

[英]How to check if number of lines in a text file is power of 2?

我正在制作一個程序來模擬類似於瘋狂三月錦標賽的情況,其中 64 支球隊將相互對抗。 我已經使用 fstream 從文件中讀取團隊。 我遇到的問題是我必須確保文件中始終至少有一個 2 次方的團隊,否則它將無法正常運行。 我將如何實現一個檢查是否有 2 行電源的功能?

檢查是否在團隊數量中設置了一個位。

bool powerOfTwo = std::popcount(numberOfTeams) == 1;

二進制數的一個技巧是,如果n是 2 或 0 的冪,則n & (n - 1)為 0。否則不是。

IE

bool isPowerOfTwo(int n) {
    return (n & (n - 1)) == 0;
}

這有效,因為:

  • 2 的冪在二進制中有一個 1 位,其余位為 0。
  • 要從二進制數中減去 1,請更改最后 1 位及其后的所有位。
  • 如果這是整個數字中唯一的 1 位,那么所有沒有變化的位都是 0。 否則他們不都是0。

例子:

    0000 0000 0010 0000 (32)
  & 0000 0000 0001 1111 (31)
  = 0000 0000 0000 0000 (0) (so 32 is a power of 2)

    0000 0000 0110 0100 (100)
  & 0000 0000 0110 0011 (99)
  = 0000 0000 0110 0000 (96) (so 100 is not a power of 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM