S.a arkadaslar. Asagidaki tanımlamada ne yapilmak isteniyor? Bilgilendirirseniz sevinirim.
Deneme : Packed Record Case Byte Of
0 : (LngW:LongWord;);
1 : (LngI:LongInt;);
2 : (Byt4,Byt3,Byt2,Byt1:Byte;);
End =(LngW:0);
Packed Record Hk.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Packed Record Hk.
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Packed Record Hk.
Yanlış hatırlamıyorsam record tanımındaki her alan değişkeni 2'nin katları şeklinde bellekte yer kaplar. Bu tek byte lık tip olsa bile böyledir. Böylelikle record alan değerlerine erişim yüksek performans ile sağlanacaktır. Eğer performanstan ziyade bellekte kapladığı yer önemli ise her değişken tipi kadar yer kaplasın isteniyorsa o zaman da packed record tanımı kullanılmalı. Aynı record tanımları bu anahtar kelime ile bellekte kapladığı yer farklı olarak tanımlanabilir. Tabi bu noktada alan değerlerine erişim diğerine göre gecikmeli olacaktır.
Zaten konu internet üzerinde örneklerle incelenmiş sayfalara rastlayabilirsiniz.
http://www.delphibasics.co.uk/RTL.asp?Name=Packed
Sizin örneğe gelince zaten 4 byte değerinde bir yapı kullandığınız için Packed Record ile Record kullanılması arasında fark yoktur. Buradaki asıl nokta case ile kurulan yapı ile bu 4 byte lık alana değişik değişkenler aracılığıyla erişebilmek. Böylesi bir tanımda Deneme tipli bir yapıda LngW ile veya LngI ile 4 byte lık değer komple işlenebilir. Bu değişkenlerden birisine değer atamak diğer tüm alanların da değerini değiştirir. Çünkü bu değişkenler bellekte aynı adreste çakışık olarak tutulmaktadırlar. Tabi Byt4..Byt1 de aynı adresten başlayan ardışık 4 değişken olduğu için böylesi değişiklikler bu değişkenleri de etkileyecektir. Tersi durumda yani Byt4..Byt1 değişkenlerinden birinde yapılacak değişiklik LngW ve LngI değişkenlerinin değerini değiştirecektir. Bu hangi byte üzerinde ne yapıldığına bağlı olarak hesaplayabileceğiniz değişikliklerdir.
Zaten konu internet üzerinde örneklerle incelenmiş sayfalara rastlayabilirsiniz.
http://www.delphibasics.co.uk/RTL.asp?Name=Packed
Sizin örneğe gelince zaten 4 byte değerinde bir yapı kullandığınız için Packed Record ile Record kullanılması arasında fark yoktur. Buradaki asıl nokta case ile kurulan yapı ile bu 4 byte lık alana değişik değişkenler aracılığıyla erişebilmek. Böylesi bir tanımda Deneme tipli bir yapıda LngW ile veya LngI ile 4 byte lık değer komple işlenebilir. Bu değişkenlerden birisine değer atamak diğer tüm alanların da değerini değiştirir. Çünkü bu değişkenler bellekte aynı adreste çakışık olarak tutulmaktadırlar. Tabi Byt4..Byt1 de aynı adresten başlayan ardışık 4 değişken olduğu için böylesi değişiklikler bu değişkenleri de etkileyecektir. Tersi durumda yani Byt4..Byt1 değişkenlerinden birinde yapılacak değişiklik LngW ve LngI değişkenlerinin değerini değiştirecektir. Bu hangi byte üzerinde ne yapıldığına bağlı olarak hesaplayabileceğiniz değişikliklerdir.
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
var Den:Deneme;
begin
Den.LngI:=-2133123;
ShowMessage(IntToStr(Den.LngW));{LongWord tipi negatif değer tutmaz bellekteki karşılığı 4292834173{}
ShowMessage(Format('4->%d 3->%d 2->%d 1->%d',[Den.Byt4,Den.Byt3,Den.Byt2,Den.Byt1]));
Den.Byt4:=87;
ShowMessage(Format('W->%s I->%d',[IntToStr(Den.LngW),Den.LngI]));
ShowMessage(Format('4->%d 3->%d 2->%d 1->%d',[Den.Byt4,Den.Byt3,Den.Byt2,Den.Byt1]));
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Packed Record Hk.
Verdiğiniz bilgiler için teşekkürler hocam.
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)