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

  • Kontor.TV

    Kontor.TV

    14 Mart 2006
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007