Untitled

mail@pastecode.io avatar unknown
csharp
2 years ago
1.2 kB
19
Indexable
Never
        /// <summary>
        /// Klasik yol ile verilen pozitif sayı ikinin tam kuvveti mi?
        /// </summary>
        static bool IsPowerOfTwo(int n)
        {
            if(n < 1)
            {
                return false;
            }

            while(n != 1)
            {
                if(n % 2 != 0)
                {
                    return false;
                }

                n /= 2;
            }

            return true;
        }

        /// <summary>
        /// Bit manipülasyonu ile verilen pozitif sayı ikinin tam kuvveti mi?
        /// </summary>
        static bool IsPowerOfTwoBitwise(int n)
        {
            if (n < 1)
            {
                return false;
            }

            return (n & (n - 1)) == 0;

            //* 1: 0001
            //* 2: 0010
            //* 4: 0100
            //* 8: 1000

            // Hepsinde sadece 1 adet 1 biti var.
            // Bu nedenle sayının 1 eksiği ile bitwise AND işlemi yaparsak, hepsi sıfırlanır.

            // Ör: 8 sayısı için

            // 1000 (8)
            // 0111 (7)
            // &
            // 0000
        }