# Bitwise Guide

- **İngilizce aslı:** https://wiki.facepunch.com/gmod/bitwiseguide
- **Çeviri tarihi:** 2026-03-31

Başlık Tag ( Bitwise Rehberi)

## Bitwise Açıklaması

Bildiğiniz gibi, bilgisayarlardaki her şey en düşük düzeyde ikili. İkilik sistemindeki 1 ve 0'lara bit denir ve 8 biti bir bayt olarak adlandırılır.

[Bitwise Operasyonları](https://en.wikipedia.org/wiki/Bitwise_operation) bu bitleri manipüle etmek için tasarlanmış fonksiyonlardır. Bu çeşitli nedenlerle kullanılabilir ancak genellikle programcının yeni bilgileri aynı miktarda alana saklaması amacıyla ikili 1'lerin ve 0'ların elle çevirilmesi için kullanılmaktadır. [biraz.](https://gmod.tr/wiki/bit) Kütüphane.

## Açıklama:

Şimdi bitsiz işlemlerin ne olduğunu anladığınızı ve anlayışınızı güçlendirmek için bir örnek bıraktığınıza göre.

Aşağıda, bir RGBA değerini 32 bit uzunluklu int değere "paketleyen" bir kod fragmanı verilmiştir. [Hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal) form).

```lua
-- Bunlar kullanışlı olsalar da, bitsiz işlemler için gerekli olmayan ileri bildirimler.
local band = bit.band
local bor = bit.bor
local lshift = bit.lshift
local rshift = bit.rshift

-- RGBA değerini paketlemek
local function rgb_to_hex(r,g,b, a)
    a = a or 255
return bor(lshift(r, 24), lshift(g, 16), lshift(b, 8), a)
end
-- RGBA değerinin paketlenmesi
local function hex_to_rgb(hex)
    return rshift(hex, 24), rshift(band(hex, 0x00ff0000), 16), rshift(band(hex, 0x0000ff00), 8), band(hex, 0x000000ff)
end
```

Şimdi bu işlemleri birebir bölüyoruz. Böylece bitlerin el ile çevirilmesi için işlemi nasıl kullandığımızı anlayabilirsiniz.

### Paketleme Süreci

Başlamadan önce, geri vermek istediğimiz ikili sayının uzunluğunu görselleştirelim. Bir sayı iade etmek istiyorsak 32 bit göndermek istiyoruz:

```lua
00000000 00000000 00000000 00000000
```

Her boşluk bir baytı oluşturan 8 bit'i temsil eder.

Bu örnek için bizim `r` Değeri 255 olacak (İkili `11111111`1 adımdaki int'e ekleyelim:

```lua
00000000 00000000 00000000 00000000 -- Boş Int
00000000 00000000 00000000 11111111 255 --
```

Şimdi bu int'e daha fazla bit eklemek için önce 255 değerimizi yoldan çıkarmamız gerekiyor. [bit.lshift](https://gmod.tr/wiki/bit.lshift) function which kullanmak istediğimiz değeri alacak (`255 or 11111111`) ve soluna hareket ama `n` Bit miktarı.

Değerimizi başlangıç baytına taşımak istediğimiz için onu 24 bit sola taşıyacağız.

```lua
00000000 00000000 00000000 00000000 -- Boş Int
00000000 00000000 00000000 11111111 255 --
bit.lshift(255,24)

11111111 00000000 00000000 00000000
```

Bu işlevi sonraki her RGBA bileşeni için yapacağız:

```lua
r = 255 or 11111111
g = 200 or 11001000
b = 150 or 10010110
a - 255 or 11111111
- Takma kod.
00000000 00000000 00000000 00000000 -- Boş Int
bit.lshift(r,24) -- 255'in r değerini ekleyerek ve hareket ettirerek 24 bit kaldı.
11111111 00000000 00000000 00000000
bit.lshift(g,16) -- 200'ün g değerini ekleyerek ve hareket ettirerek 16 bit kaldı.
11111111 11001000 00000000 00000000
bit.lshift(b,8) -- 150'nin b değerini toplayıp 8 bit kaldı.
11111111 11001000 10010110 00000000
```

Şimdi sadece son 8 bit (veya bayt) kaldığı için biz de ekleyebiliriz. `a` Son bitli işlemimizle değeri sona erdirdik.

- `bit.bor` Operasyon burada sadece her şeyi bitsiz bir sayı olarak kapsayacak şekilde var. Bu kısım için hiçbir mantıksal fayda sağlamaz.

```lua
-- 255'in A değerini eklerken ki bu doğal olarak sonunda gerçekleşir.
bit.bor(bit.lshift(r, 24), bit.lshift(g, 16), bit.lshift(b, 8), a)

11111111 11001000 10010110 11111111
-- Not: Şimdi bir araya getirdiğimiz ikili dizi yine de diğer sayılar gibi ondalık veya onaltılık olarak ifade edilebilir.
4291335935 -- Ondalık biçimi
FFC896FF   -- Hexadecimal
```

İşte paketleme işlemi için bu kadar. 4 sayısal değeri alıp 1 daha büyük değerle temsil ediyoruz.

#### Neden?

Bilgisayarın gördüğü gerçek bilgi parçalarını karşılaştırırsak bunu kolayca görebiliriz:

```lua
Eğer hedefimiz 4 numarayı depolamaksa (255, 200, 150, 255) Bilgisayar normalde bunları nasıl saklar.
11111111 00000000 00000000 00000000
00000000 11001000 00000000 00000000
00000000 00000000 10010110 00000000
00000000 00000000 00000000 11111111
- Her sayının düzgün bir şekilde temsil edilmesi için gereken tüm ekstra bitleri görüyorsunuz...
-- Biz bitsiz fonksiyonlarımızı kullanarak tüm bu sayıları şöyle çevirdik:
11111111 11001000 10010110 11111111
- Gördüğünüz gibi fazladan bilgiyi boşa harcamıyoruz.
```

### Paketlenme Süreci

Şimdi ne yaptığımızı bildiğiniz için paketleme işlemi çok daha kolaydır. Bilgilerimizi dışarı çıkarmamız gerekiyor.

Tek yapmamız gereken, çıkarmak istediğimiz değerleri izole etmek. Bunu hexadecimal değeri kullanarak yapabiliriz

```lua
0x00ff0000 == 11111111 00000000 00000000
0x0000ff00 == 11111111 00000000
0x000000ff == 11111111
-- ilk baytımızı çıkarmak için:
11111111 11001000 10010110 11111111

we will need to align the bits so our comparison works

so we will need to shift our hex by 24 bytes to the right
```

### Bit bayrakları

Bit bayrakları (veya bit bayrağı) tek bir sayının içinde depolanan, 32 bit tamsayı üzerindeki her bitin ayrı bir bayrak olduğu bayraklardır.

Doğaları gereği bitwise OR işlemini kullanarak birlikte birleştirilebilirler. [bit.bor](https://gmod.tr/wiki/bit.bor).

Örneğin: [FL listesi](https://gmod.tr/wiki/Enums/FL)Birleştiririz. `FL_NPC` (değer 16384) ve `FL_GODMODE` (değer 32768) böyle birleştirildi.

```lua
-- Diğer dillerde "myBitFlags = FL_NPC".
local myBitFlags = bit.bor( FL_NPC, FL_GODMODE )
```

Bit bayrakları bitwise AND işlevi ile test edilebilir. Eğer yukarıdaki işlemi alır ve sonucunu bir değişkendeki kaydedersek, belirli bir bayrağın (veya birden fazlasının) aşağıdakiler gibi bir sayıda ayarlanıp belirlenmediğini sınayabiliriz:

```lua
-- Diğer dillerdeki "if (myBitFlags & FL_GODMODE )!= 0 () {}" eşdeğeri
if ( bit.band( myBitFlags, FL_GODMODE ) ~= 0 ) then
print( "The flag FL_GODMODE is set." )
end
```

Son olarak, bit işaretleri BAND ve NOT işlemleriyle kaldırılabilir:

```lua
-- Diğer dillerde "myBitFlags &= ~FL_GODMODE"nin eşdeğeri
myBitFlags = bit.band( myBitFlags, bit.bnot( FL_GODMODE ) )
```

Bitsiz işlemler sıralı olan sayımlarda kullanılamaz, yani 1,2,3,4,5,6, vb. [HUD listesi](https://gmod.tr/wiki/Enums/HUD).

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/bitwiseguide
