Hiç kullanmak zorunda kaldın mı bit kayması gerçek programlama projelerinde? Çoğu (eğer olmasa bile) yüksek seviyeli dillerin içinde vardiya operatörleri vardır, ancak bunları gerçekten ne zaman kullanmanız gerekir?
Hiç kullanmak zorunda kaldın mı bit kayması gerçek programlama projelerinde? Çoğu (eğer olmasa bile) yüksek seviyeli dillerin içinde vardiya operatörleri vardır, ancak bunları gerçekten ne zaman kullanmanız gerekir?
Hala donanımda kayan nokta desteği olmayan sistemler için kod yazarım. Bu sistemlerde neredeyse tüm aritmetikleriniz için bit kaydırmaya ihtiyacınız var.
Ayrıca karma oluşturmak için vardiya ihtiyacınız var. Polinom aritmetiği (CRC, Reed-Solomon Kodları ana uygulamalardır) veya vardiyaları kullanır.
Bununla birlikte, vardiyalar sadece kullanıldıkları için kullanıldıkları ve yazarın tam olarak ne ifade ettiklerini ifade ettikleri için kullanılır. İsterseniz, tüm bit vardiyalarını çarpma ile öykünebilirsiniz, ancak yazmak daha zor, daha az okunabilir ve bazen daha yavaş olur.
Derleyiciler, çarpmanın bir vardiyaya indirilebileceği durumları tespit eder.
Evet, onları çok kullandım. Bit-maskelerinin çok yaygın olduğu gömülü donanımlarda bit twiddling önemlidir. Her son performansa ihtiyaç duyduğunuzda, oyun programlamasında da önemlidir.
Düzenle: Ayrıca, bitmap'leri manipüle etmek için, örneğin renk derinliğini değiştirmek veya RGB <-> BGR'yi dönüştürmek için çok kullanırım.
Ve kullanıldıklarında pek çok durum düşünemiyorum. Bu genellikle başka bir yoldur - bazı özel problemler vardır ve bit operasyonlarının kullanılmasının en iyi sonuçları (genellikle performans - zaman ve / veya alan) vereceği ortaya çıkmaktadır.
Onları her zaman kullandığım bir yer, platformlar arası uygulamalar için tamsayıların endeksini transpoze ederken. Ayrıca, 2D grafikleri karıştırırken bazen (diğer bit manipülasyon operatörleri ile birlikte) kullanışlı olurlar.
Onları birkaç kez kullandım, ama her zaman bir ikili dosya formatını ayrıştırmak için.
Makul makale burada: http://greatjustice.info/the-lost-art-of-bitmasks/
Bit vardiyaları hızlıdır. Bölme ve modül operasyonlarından çok önce CPU komut setlerinde uygulandılar. Birçoğumuz kalem ve kağıt üzerinde basit ama CPU'larımızda bulunmayan aritmetik için bit vardiyalarını kullandık.
Örneğin:
Evet, hala gerekli.
İşte işimde örneğin, seri port COMx üzerinden PLC ile iletişim için yazılımlar geliştiriyoruz. Bir bayt içinde bitleri işlemek için gereklidir, sola kaydırma / sağa ve mantıksal işleçler OR, XOR ve AND'ı gün içinde kullanırız.
Örneğin, bir baytın bit 3'ünü (sağdan sola) açmamız gerektiğini varsayalım:
Yapılması çok daha verimli:
Byte B; B := B XOR 4;
Yerine:
Byte B = 0; String s; // 0 based index s = ConvertToBinary (B); s[5] = "1"; B := ConvertToDecimal (s);
Saygılarımızla.
Assembly dilinde yazdığımda, kodum bit kaydırma ve maskeleme ile doluydu.
C de adil bir miktar mıydı.
JavaScript veya sunucu dillerinde fazla yapmadım.
Muhtemelen en iyi modern kullanım, birler ve sıfırlar olarak temsil edilen dolu bir boole değerleri dizisini atmaktır. Her zaman kaymayı bıraktım ve montajda işaret biti olup olmadığını kontrol ettim, fakat daha yüksek dilde bir değerle karşılaştırırsınız.
Örneğin, 8 bite sahipseniz, üst biti "eğer (a> 127) {...}" ile kontrol edersiniz. Sonra vardiya (ya da 2 ile çarpın), bir "ve" ile 127 (ya da son biti ayarlanmışsa 256 çıkartma) yapın ve tekrar yapın.
Onları, bir bitmap'deki bitlerin sıkıştırıldığı görüntü sıkıştırma / dekompresyonunda çok kullandım. kullanma http://en.wikipedia.org/wiki/Huffman_coding Sıkıştırılmış olan şeyler çeşitli sayıda bitten oluşur (hepsi bayt hizalanmış değildir) ve bu nedenle bunları kodlarken veya deşifre ettiğinizde bunları bitiştirmeniz gerekir.