Forum: Duyurular RSS
Yeni ders: Bit İşlemleri
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Yeni ders: Bit İşlemleri
  http://ddili.org/ders/d/bit_islemleri.html

Ali
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
D'de bit alanlarının (bitfields) bulunmadığını hatırladım. :) Eğer olsaydı, bu dersten sonra doğal olarak sıra ona gelecekti.

Bit alanları kütüphane olanağı olarak çözülmüş:

  http://digitalmars.com/d/2.0/phobos/std_bitmanip.html

Bit işlemlerinin sağladığı maskeleme yöntemi ile gerçekleştiriyorlar. O sayfadan kopya bir örnek:

import std.stdio;
import std.bitmanip;
 
struct Yazmaç
{
    union
    {
        uint değeri;
 
        mixin(bitfields!(ubyte"birinci", 8,
                         ubyte"ikinci"8,
                         ushort, "üçüncü", 16));
    }
}
 
void göster(uint sayı)
{
    writefln("%032b %08x %10s", sayı, sayı, sayı);
}
 
void main()
{
    Yazmaç yazmaç;
 
    yazmaç.birinci = 10;
    yazmaç.ikinci = 20;
    yazmaç.üçüncü = 30;
 
    göster(yazmaç.değeri);
}

Çıktısı (bit alanlarını belli etmek için aralarına elle '-' yerleştirdim; üçüncü-ikinci-birinci şeklinde duruyorlar):

0000000000011110-00010100-00001010 001e140a    1971210

Henüz birlikleri (union) ve katmaları (mixin) anlatmadığım için derse eklemeyeceğim ama görüldüğü gibi kullanımları çok basit.

Sonuçta, aynı uint içinde üç bit alanı oluşturuluyor. İlk ikisi 8'er bitlik, üçüncüsü 16 bitlik.

Ali

Not: bitfield'ler C'de ve C++'da sorunludur ve taşınabilen olanaklar değildir. Alanların ne sıraları, ne aralarına gelebilecek doldurma bitleri, ne de başka bir şey bilinebilir. :) O yüzden zamanında bir C++ çözümü bulmaya çalışmıştım:

  http://acehreli.org/turkcecpp/programlar/bitfield/

O şablonu yazdığım proje sonuçlanmadığı için ne kadar kullanışlı olduğunu da bilemem. :)
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yaşlanıyorum! :)

Bu mesajın hemen hemen aynısı yazdım ve neredeyse gönderecektim. Ama göndermeden önce aramaya karar verdim ve yukarıdaki mesajı buldum... :)

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Duyurular RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 00:41:20 (UTC -08:00)