Merhaba.Burada cevap -126 oluyor.

public static void main(String [] args) {
    long l = 130L;
    byte b = (byte)l;
    System.out.println("The byte is " + b);
}

-128< byte <127 olduğundan runtime error bekliyordum.Sebebi ne olabilir? Teşekkürler

soruldu: 22 Şub '13, 11:33

mensure%20resulzade's gravatar image

mensure resulzade
668913
cevap kabul oranı: 0%

değiştirildi: 25 Şub '13, 06:34

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

130 = 10000010 burada 0la 1i deyiwdik 1 elave edib 01111110 aldik bunu ise 10lukdan cevirdiyimizde bize 126 verdi 21de oyle olmadi ama 21 = 00010101 0la 1in yerini deyiwib 1 elave etdik ve 11101011 aldiq bunu cevirdiyimde ben de 235 aliyorum netbeansde public static void main(String[] args) { int a = 235; byte b= (byte) a; System.out.println(b); }

yazdim ve sonuc olarak -21 aldim

public static void main(String[] args) { int a = 21; byte b= (byte) a; System.out.println(b); } bunu caliwdirirsak 21 aliriz Benim anlamadigim 130 byte tipini awiyordu ama 21 zaten byte-a daxil onu neden ceviriyoruz ki?

(23 Şub '13, 14:30) mensure resulzade mensure%20resulzade's gravatar image

şimdi byte tipi 8 bitlik ya işaret bitiyle birlikte sen byte sınırları arasında bir değer gönderdiğinde ilk biti işaret biti diğer bitleri ise sayının değerini oluşturan bitler olarak algılanır. yani 1+7.
ama sen 130 gibi bir değer gönderdiğin zaman senin ilk 8 bitin de aslında sayıyı oluşturan bitler olarak düşünüyorsun ama bilgisayar gene onu ilk biti işaret biti olan 1+7 bitlik bir sayı olarak algılıyor ve eksi sonuç veriyor.

(23 Şub '13, 18:27) goksel goksel's gravatar image

aslında sen makineye ...000000010000010 sayısını gönderiyorsun integer olarak gönderdiğinde ama byte'a cast et dediğin zaman başındaki 0 bitlerini atıp son 8 biti alıyor yani sen makineye 10000010 değerini göndermiş oluyorsun bu da negatif bir sayı gönderdiğin anlamına gelir java da bu negatif sayının değerini sana verir.

(23 Şub '13, 18:32) goksel goksel's gravatar image

sayı tiplerinde(kaç bitlik sayı olduğu önemli değil) 1. bit işaret biti yani sayının negatif mi pozitif mi olduğunu belirleyen bittir. 1. bit 0 ise sayı pozitif, 1 ise sayı negatiftir. ayrıca sayının negatifi sayının ikiye tümleyenidir. örnek verecek olursak
21 = 00010101 burada 1 gördüğümüz yere 0, 0 gördüğümüz yere 1 yazıp +1 dersek -21 sayısını elde ederiz.
-21 = 11101011 olur. Senin örneğinde ise 130 sayısını byte tipine çevirmek istiyorsun. 130 sayısının ikilik karşılığı
130 = 10000010 olur. Yukarıda dediğim gibi ilk bit işaret biti olarak kabul edildiği için senin sayın sanki 01111110 sayısının tümleyeni olarak algılanıyor bu yüzden -126 cevabı alıyorsun.
Not:Tipler birbiri arasında dönüştürülürken ilk önce ikilik sisteme sonra hedef tipe dönüştürülürler. Tipler arası dönüşüm yaparken byte en düşük değerlikli yani en sağdaki 8 biti esas alır. Aynı şekilde integer sınırından büyük bir long değeri integer değere çevirirken integer da en sağdaki 32 biti esas alır.

permanent link

cevaplandı: 22 Şub '13, 21:16

goksel's gravatar image

goksel
82071728
cevap kabul oranı: 8%

değiştirildi: 22 Şub '13, 21:19

Merhaba. -21 = 11101011 geri dönersek 11101011=2^7+2^6+2^5+1*2^3+2^1+2^0=128+64+32+8+2+1=235 yani 2-likten 10-luk sisteme geçtiğimizde -21-i alamadım?sebeb ne ola bilir?Teşekkürler

(23 Şub '13, 13:18) Serxan Serxan's gravatar image

İkilikten onluk sisteme çevirirken yukarıda yaptığımızın tam tersini yapıyoruz. İlk önce 11101011 neyin ikiye tümleyeni oluyor diye bakıyoruz.
11101011 -000000001 = 11101010 olur sonra 1leri 0, 0ları 1 yaparsak
00010101 = 1x2^0+ 1x2^2+ 1x2^4 = 21 yapar. Yani sanki bizim programa 21'in ikiye tümleyenini verdiğimizi algılar ve sonuç olarak buradan -21 değerini döndürür.

(23 Şub '13, 13:31) goksel goksel's gravatar image

Burada java casting'i kendisi yaptıgı için aslında yaptıgı şey son 8 biti almaktır.

permanent link

cevaplandı: 24 Şub '13, 13:27

ibrahimdemir's gravatar image

ibrahimdemir
77068
cevap kabul oranı: 0%

bilinçsiz olarak büyük türlerin küçük türlere olan dönüşümleri derleyici tarafından veri kaybı yaşanmaması için engellenmiştir. Bilinçli tür dönüşümünde tıpkı isminden de kaynaklandığı gibi derleyiciye, "biz bunun dönüşmesini istiyoruz!" şeklinde bir diretme yapıyor ve oluşabilecek veri kayıplarınında farkında olduğumuzu bir nevi bildiriyoruz. işte o zaman hata vermeden dönüştürülecektir.

permanent link

cevaplandı: 27 Şub '13, 15:39

ercet00ilk's gravatar image

ercet00ilk
994435662
cevap kabul oranı: 11%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,076

Soruldu: 22 Şub '13, 11:33

Görüntüleme: 739 kez

Son güncelleme: 27 Şub '13, 15:39

powered by BitNami OSQA