SORU
9 Kasım 2008, Pazar


Bit operatörleri nelerdir?

Sadece eğlence için kod yazan biri değilim ve gerçekten bu tür şeyler bu bit operatörleri beni gerçekten kaçar gibi akademik ve / veya profesyonel bir ortamda dalmıştır, olmadı.

Görünüşe göre bit düzey işlemleri destekleyen JavaScript, hakkında bir makale okuyordum. Bu işlemi yerlerde bahsedilen görüyorum, ve ne olduğunu anlamak için okuma konusunda denedim, ama ben sadece onu almak için görünmüyor. Onlar nelerdir? Net örnekler harika olurdu! :D

Sadece bir kaç soru daha - bit düzey işlemleri bazı pratik uygulamalar nelerdir? Onları ne zaman kullanabilirsiniz?

CEVAP
10 Kasım 2008, PAZARTESİ


Kimse beri gündeme olan bu yararlı neden olan bir konu

Bayraklar ile çalışırken, bit düzey işlemleri çok kullanırım. Bir operasyon için bayraklar bir dizi geçmek istiyorum (Dosya.örneğin, Açık modunda Okuma ve Yazma modu ile hem etkin), tek bir değer olarak onları geçmek. Bu olası her bayrak bir bitset (byte, short, int veya long kendi bit atayarak gerçekleştirilir. Örneğin:

 Read: 00000001
Write: 00000010

Eğer pas okumak VE yazmak istiyorsanız, o zaman ikiye birleştiren geçmesi (OKUMA | YAZMA)

00000011

Hangi diğer ucunda gibi çözülebilecek:

if ((flag & Read) != 0) { //...

kontrol eden

00000011 &
00000001

verir

00000001

bayrağı belirtin yani 0, OKUMAK değil.

XOR çeşitli bit geçiş yapmak için kullanabilirsiniz. Yön girişi belirtmek için bir bayrak (Yukarı, Aşağı, Sola, Sağa) kullanarak bunu kullandım. Eğer bir sprite yatay olarak hareket ediyorsa, örneğin, ve bunu düzeltmek istiyorum:

     Up: 00000001
   Down: 00000010
   Left: 00000100
  Right: 00001000
Current: 00000100

Ben sadece kapalı ve sağdan SOLA dönecek olan akım değeri (SOL | SAĞ), bu durumda XOR.

Bit Değişen çeşitli durumlarda yararlıdır.

x << y

aynı gibi

x * 2y

eğer hızlı bir şekilde iki güç ile çarpın, ama üst içine 1-bit bir bit kayması dikkat etmek gerekir, - bu imzasız değilse sayıyı negatif yapar. Verilerin farklı boyutları ile uğraşırken de işe yarayabilir. Örneğin, dört bayt tamsayı okuma:

int val = (A << 24) | (B << 16) | (C << 8) | D;

Bir en önemli bayt varsayarak ve D en azından. Sonunda o da şu:

A = 01000000
B = 00000101
C = 00101011
D = 11100011
val = 01000000 00000101 00101011 11100011

Renkleri genellikle bu şekilde (en önemli bayt veya gözardı Alfa olarak kullanıldıĞında) saklanır:

A = 255 = 11111111
R = 21 = 00010101
G = 255 = 11111111
B = 0 = 00000000
Color = 11111111 00010101 11111111 00000000

Değerleri yeniden bulmak için, sadece altta olana kadar sağa bit kaydırma, kapalı kalan üst düzey maske biti sonra:

Int Alpha = Color >> 24
Int Red = Color >> 16 & 0xFF
Int Green = Color >> 8 & 0xFF
Int Blue = Color & 0xFF

0xFF 11111111 aynıdır. Yani aslında, Kırmızı için, bu yapıyor olurdu:

Color >> 16 = (filled in 00000000 00000000)11111111 00010101  (removed 11111111 00000000)
00000000 00000000 11111111 00010101 &
00000000 00000000 00000000 11111111 =
00000000 00000000 00000000 00010101 (The original value)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • hans peder sahl

    hans peder s

    22 Temmuz 2009
  • NYCarspotter

    NYCarspotter

    26 EYLÜL 2011