Bit Manipülasyonları 2

mail@pastecode.io avatar
unknown
csharp
3 years ago
1.7 kB
28
Indexable
Never
        /// <summary>
        /// Belirli bir biti tersine çevirme
        /// </summary>
        static int FlipBit(int x, int position)
        {
            int mask = 1 << position;
            return x ^ mask;

            // x = 6 yani 110 ve position 1 diyelim.

            // mask 10 olur.

            // 110
            // 010
            // ^
            // 100 yani 4 olur.
        }

        /// <summary>
        /// Sayıyı 2 ile çarpma veya bölme
        /// </summary>
        static int DivideOrMultipleByTwo(int n)
        {
            return n >> 1;
            // return n << 1;

            // 16 yani 10000 için, 1000 yani 8 döndürür.
            // 15 yani 1111 için, 111 yani 7 döndürür.
        }

        /// <summary>
        /// Belirli pozisyondaki bitin set edilip edilmedini bulur.
        /// </summary>
        static bool IsBitSet(int n, int position)
        {
            n >>= position;
            return (n & 1) != 0;

            // Ör: n = 12 yani 1100 diyelim. position 1 olsun.
            // ilk satırdan sonra 110 olur.
            // 
            // 110
            // 001
            // &
            // 000 olur, 0 elde ediyorsak o bit set edilmemiş (0) demektir.
        }

        /// <summary>
        /// Verilen karakterin alfabedeki yerini bulur.
        /// </summary>
        static int LetterPositionInAlphabet(char c)
        {
            return c & 31;

            // A --> 65 --> 1000001
            // b --> 98 --> 1100010

            // 1100010
            // 0011111 --> 31
            // &
            // 0000010 yani 2. harf olduğu bilgisin döner.
        }