Bit Manipülasyonları - 1. Kısım
unknown
csharp
5 years ago
1.7 kB
51
Indexable
/// <summary>
/// Verilen sayı 2'nin bir tam kuvveti mi?
/// </summary>
static bool IsPowerOfTwo(int i)
{
return i > 0 && (i & (i - 1)) == 0;
// 2 --> 10
// 4 --> 100
// 8 --> 1000 ve 7 --> 0111
// 1000
// 0111
// &
// 0000
}
/// <summary>
/// Verilen iki değeri değiştirme
/// </summary>
static void Swap(int a, int b)
{
a ^= b;
b ^= a;
a ^= b;
// a --> 11 ve b --> 10
// a ^= b; sonrası a -> 01
// b ^= a; sonrası b -> 11
// a ^= b; sonrası a -> 10
}
/// <summary>
/// İstediğimiz pozisyondaki bit'i 1 yapar.
/// </summary>
static int SetBit(int x, int position)
{
int mask = 1 << position;
return x | mask;
// position 1, x = 5 yani 101 olsun.
// mask 10 olur.
//
// 101
// 010
// |
// 111 yani 7 değerini verir.
}
/// <summary>
/// İstediğimiz pozisyondaki bit'i 0 yapar
/// </summary>
static int ClearBit(int x, int position)
{
int mask = 1 << position;
return x & ~mask;
// position 1, x = 7 yani 111 olsun.
// mask 010 olur.
// ~mask tüm bitleri tersine çevirerk 101 yapar.
//
// 111
// 101
// &
// 101 yani 5 değerini verir.
}Editor is loading...