Kayıtlar

Bit İşlemleri etiketine sahip yayınlar gösteriliyor

C++ Dersleri | Bit İşlemleri - Bit Kopyalama

 C++ dersleri bit işlemlerinde bit kopyala konusundayız, bit kopyalamaktan kastımız nedir bir kaynak bitimiz var onun değerini alıyoruz, hedef bitimize yazıyoruz : 0 ise 0, 1 ise 1: int   main () { int   source   =   5 ; int   target   =   3 ; int   number   =   0b00100100 ;   // 36 number   ^=   (- source   ^   number )   &   ( 1LL   <<   target );   // 0010 1100 // target bitini source bitiyle aynı yapar. cout   <<   " result= "   <<   number   <<   endl ; }  result=44  çıktısını alıyoruz. işlem yapacağımız değer 36 'ydı 5. bitin değerini 3. bite yazınca 44 olmuş oldu. Sırasıyla işlemlerimize bakmamız gerekirse: değişenlerin değerlerini yerine yazarak devam edelim :  number = 36 ^  (-5 ^ 36) & (1 <<  3); 1 << 3 : 0000 1000b değerini elde ettik, -5 ^ 36 : 1111 1011 ^ 0010 0100 -> 1101 1111b elde ettik, bu iki değeri & liyoruz : 0000 1000b & 1101 1111b -> 0000 1000 elde ettik, son olara

C++ Dersleri | Bit işlemleri, Bit Clear ve Bit Set

 C++ dersleri bit işlemlerinde belki de en çok kullandığımız bit işlemlerinden biri bit set diğeri de bit clear dir desek yanılmış olayız herhalde, bitwise OR konusunda örneğini vermiştik burda da kullanalım: int indexOfBitToSet = 5 ; PORTB |= 1LL << indexOfBitToSet ; 5. indexteki bit 'i set eder. portB 'nin 5 numaralı pini Set edilmiş (HIGH) olur. Burada diğer pin konfigürasyonları bu durumdan etkilenmezler. PORTB 'nin 0000 0000b olduğunu düşünelim, 1 << 5 bize 0010 0000b değerini verir, bu değerle 0000 0000b değeri orlanırsa, gayet basitçe 5. indexin 1 olduğunu görebiliyoruz. Aynı şekilde bir bit dizesindeki belirli bir biti CLEAR (0) yapmak için bitwise and kullanıyoruz:   int indexOfBitToClear = 5 ;   PORTB &= ~( 1LL << indexOfBitToClear ); şimdide PORTB 'nin tümünün HIGH olduğunu varsayalım, 1111 1111b, 1 << 5 'den 0010 0000b değeri gelir, ifadenin başında yer alan ~ işaretiyle bit dizisindeki tüm değerler inverse oldu,

C++ Dersleri | Bit işlemleri - Bit Kontrol

 C++ bit işlemlerinde bir bit dizesindeki belirli bir bitin durumunu kontrol etmek için değeri elde etmek istediğimiz bitin indeks değeri kadar right shift yapıp üzerinde and işlemi uygulayarak yapılabilir. Cümle şeklinde ifade edince bana bile anlaşılabilir gelmedi :) kodla bakalım : int   main () { int   a   =   170 ;       // 10101010 int   result   =   ( a   >>   5 )   &   1LL ; cout   <<   " result= "   <<   result   <<   endl ;    }  result = 5  5. numaralı indexte yer alan bitin değerini sorguluyoruz, bu indexle kastettiğim sayma sayılarıyla değil, en sağdaki bit için 0 'dan başlayarak sayıyoruz anlamını ifade ediyor. Adım Adım şöyle gidiyor işlem : a = 10 1 01010 değerini   a >> 5 : 0000010 1 : yaptığımız zaman zaten istediğimiz bit en sağda yerini almış oluyor, bu değeri de 1 ile & işlemine tabi tutunca 1 ise 1, 0 ise döndürüyor result değişkenine. LL kullanmamızın sebebi Long Long deyip, değişkenin boyutundan bağı