Sanırım sorunun ikinci kısmı:
Ayrıca, bitsel operatörler gerçekte ne için kullanılır? Bazı örnekleri takdir ediyorum.
Yalnızca kısmen ele alınmıştır. Bunlar benim bu konudaki iki sentim.
Programlama dillerindeki bitsel işlemler, birçok uygulama ile uğraşırken temel bir rol oynar. Hemen hemen tüm düşük seviyeli hesaplama bu tür işlemler kullanılarak yapılmalıdır.
İki düğüm arasında veri göndermesi gereken tüm uygulamalarda, örneğin:
Alt düzey iletişim katmanında, veriler genellikle çerçeve adı verilen şekilde gönderilir . Çerçeveler, fiziksel bir kanal aracılığıyla gönderilen bayt dizileridir. Bu çerçeveler genellikle gerçek verileri ve başlık olarak adlandırılan şeyin parçası olan diğer bazı alanları (bayt olarak kodlanmış) içerir . Başlık genellikle iletişimin durumuyla ilgili bazı bilgileri (örneğin bayraklarla (bitlerle)), çerçeve sayaçlarıyla, düzeltme ve hata saptama kodlarıyla, vb. Kodlayan baytlar içerir. İletilen verileri bir çerçeve içinde almak ve veri göndermek için, bitsel işlemlerden emin olmanız gerekir.
Genel olarak, bu tür uygulamalarla uğraşırken, bir API mevcuttur, böylece tüm bu ayrıntılarla uğraşmak zorunda kalmazsınız. Örneğin, tüm modern programlama dilleri soket bağlantıları için kitaplıklar sağlar, bu nedenle aslında TCP / IP iletişim çerçevelerini oluşturmanıza gerek kalmaz. Ancak bu API'leri sizin için programlayan iyi insanları düşünün, onlar kesinlikle çerçeve yapısıyla uğraşmak zorundaydılar; düşük seviyeden daha yüksek seviyeli iletişime gidip gelmek için her türlü bitsel işlemi kullanmak.
Somut bir örnek olarak, birisinin size doğrudan telekomünikasyon donanımı tarafından yakalanan ham verileri içeren bir dosya verdiğini hayal edin. Bu durumda, kareleri bulmak için, dosyadaki ham baytları okumanız ve verileri parça parça tarayarak bir tür senkronizasyon kelimesi bulmaya çalışmanız gerekir. Senkronizasyon kelimelerini tanımladıktan sonra, aktarılan gerçek verileri almak için gerçek çerçeveleri almanız ve gerekirse onları SHIFT (ve bu hikayenin sadece başlangıcıdır) gerekir.
Bir başka çok farklı düşük seviyeli uygulama ailesi, paralel ve seri bağlantı noktaları gibi bazı (bir tür eski) bağlantı noktalarını kullanarak donanımı kontrol etmeniz gerektiğinde ortaya çıkar. Bu bağlantı noktaları, bazı baytlar ayarlanarak kontrol edilir ve bu baytların her bitinin, talimatlar açısından o bağlantı noktası için belirli bir anlamı vardır (örneğin bkz . Http://en.wikipedia.org/wiki/Parallel_port ). Bu donanımla bir şeyler yapan bir yazılım oluşturmak istiyorsanız, yürütmek istediğiniz talimatları bağlantı noktasının anlayacağı baytlara çevirmek için bitsel işlemlere ihtiyacınız olacaktır.
Örneğin, başka bir aygıtı kontrol etmek için paralel bağlantı noktasına bağlı bazı fiziksel düğmeleriniz varsa, bu yazılım uygulamasında bulabileceğiniz bir kod satırıdır:
read = ((read ^ 0x80) >> 4) & 0x0f;
Umarım bu katkıda bulunur.