tag:blogger.com,1999:blog-7180835062748654702.post-71744244526129006682007-04-15T00:46:00.000+02:002007-04-15T10:58:24.430+02:00byte byteJava'da tüm veri tipleri işaretlidir, yani C deki <span style="font-weight: bold;">unsigned</span> kavramı yoktur. Dolayısıyla Java ile biraz alt seviye işlem yapmış olanlar <span style="font-weight: bold;">byte</span> cinsinden verilerin sadece -128 ile +127 arasındaki değerleri taşıdığını bilirler. Hatta çoğu yerde byte cinsinden değişkene 0-255 arası bir değer atandığı zaman, onun işaretsiz versiyonunu elde etmek için <span style="font-weight: bold;">0xFF</span> ile <span style="font-weight: bold;">&</span> (bit and) işleminden geçirirler, peki bu nasıl çalışıyor? Örneğin,<br /><pre>// b'nin değeri -15<br />byte b = (byte)241;<br /><br />// y'nin değeri -15<br />int y = b;<br /><br />// x'in değeri 241<br />int x = b & 0xFF;<br /></pre><br />Bir byte'lık veriyi 0xFF ile & yapmak yine aynı değeri vermez mi? Java spesifikasyonuna göre byte, short gibi işlemler üzerinde gerçekleştirilen bit işlemleri sırasında operandlar otomatik olarak int'e dönüştürülür.<br /><pre>byte a = (byte) 0xf1; // int olarak +241<br />int x = a;</pre>deyince x değeri de -15 yani hex olarak 0xfffffff1 değerini alır.<br /><br />Siz herhangi bir byte değerini 0xff ile and işlemine tabi tutarsanız (a & 0xff) işlem sırasında iki değer de int karşılıklarına dönüştürülür. yani aslında şu işlemi yapmış olursunuz:<br /><pre>0xFFFF FFF1 &amp; 0x0000 00FF</pre>ve sonuç ta işaretin kaybolduğu, rakamın pozitif karşılığıdır. yani +241 (0xF1)<br /><br />buradaki önemli noktalar:<br /><ul><li>byte -> int dönüşümünde işaret korunur</li><li>bit işlemleri sırasında byte ve short tipindeki değerler değil int karşılıkları kullanılır.</li></ul>Java ile ilgili arada bir küçük notlar yazmaya devam edeceğim.M.D.Ahttp://www.blogger.com/profile/17275949971136439559noreply@blogger.com