SORU
9 Mayıs 2009, CUMARTESİ


Nasıl Java bayt içine int dönüştürmek mi?

int i =132;
byte b =(byte)i;
System.out.println(b);

Çıkış -124

Bu yüzden mi? Bu çok temel bir soru olduğunu biliyorum, ama yine de göster, ya da bunun nasıl olabildiğini anlamak mümkün değilim?

CEVAP
9 Mayıs 2009, CUMARTESİ


Java, bir int 32 bit. Bir bayt 8.

Java her şeyi imzaladı ve uzun iki kodlanmış bayt, değer vermez, tamamlayıcı.

Bu sayı düzeni içinde en önemli bit sayının işaretini belirtir. Eğer daha fazla bit gerekiyorsa, en önemli bit sadece yeni msb kopyalanır.

Eğer öyleyse 255 bayt varsa: 11111111 ve bir int (32 bit) sadece sol 24 kat için 1 kopya olarak temsil etmek istiyorum.

Şimdi, bir olumsuz iki okumak için bir yol sayısı en az önemli bit ile başlamak için bir tamamlayıcısı, ilk bulana kadar sol hareket 1, sonra ters çevir her bit daha sonra. Ortaya çıkan sayı o sayının pozitif versiyonu

yani: 11111111 - 00000001 - ^ gider . -1. Bu Java değeri olarak görüntüler.

Muhtemelen ne byte işaretsiz değerini bilmek.

Her şeyi silen bir bit maskesi ama en az önemli 8 bayt ile gerçekleştirebilirsiniz. (0xff)

Yani:

byte signedByte = -1;
int unsignedByte = signedByte & (0xff);

System.out.println("Signed: "   signedByte   " Unsigned: "   unsignedByte);

Baskı: "İmza: -1 İmzasız:" . 255

Aslında burada olan ne?

VE maske işareti gereksiz tüm bitleri (en az anlamlı 8 bit sola 1.) bit için kullanıyoruz

1111111111111111111111111010101
&
0000000000000000000000001111111
=
0000000000000000000000001010101

Beri 32 bit şimdi işareti bit yerine 8 bit (Ve yola işaret biti 0 olan olumlu), orijinal 8 bit bayt okuma ile java gibi bir artı değer.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • Santozz Yazz

    Santozz Yazz

    23 Mart 2014