Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#에서 숫자가 2의 거듭제곱인지 확인하는 방법은 무엇입니까?

<시간/>

2의 거듭제곱은 n이 정수인 2n 형식의 숫자입니다.

숫자 2를 밑으로 하고 정수 n을 지수로 하는 지수의 결과입니다.

n 2n
0 1
1 2
2 4
3 8
4 16
5 32

예시 1

class Program {
   static void Main() {
      Console.WriteLine(IsPowerOfTwo(9223372036854775809));
      Console.WriteLine(IsPowerOfTwo(4));
      Console.ReadLine();
   }
   static bool IsPowerOfTwo(ulong x) {
      return x > 0 && (x & (x - 1)) == 0;
   }
}

출력

False
True

예시 2

class Program {
   static void Main() {
      Console.WriteLine(IsPowerOfTwo(9223372036854775809));
      Console.WriteLine(IsPowerOfTwo(4));
      Console.ReadLine();
   }
   static bool IsPowerOfTwo(ulong n) {
      if (n == 0)
         return false;
      while (n != 1) {
         if (n % 2 != 0)
            return false;
         n = n / 2;
      }
      return true;
   }
}

출력

False
True