Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

C#'ta İkili Değerleri Depolama ve Gösterme

[[academy-video-youtube({"vid": "xkZa6IyqNwg", "start_time": "0", "title": "C#'da İkili Değerleri Depolama ve Görüntüleme", "creator": "Tim Corey", "length": "9d 20s"})]]

İkili sistem, bilgisayarların verileri depolama ve işleme şeklidir, ancak C# ekranda gördüğünüz her şey için varsayılan olarak ondalık tabanı kullanır. Bit bayrakları, ağ protokolleri, donanım kayıtları ile çalışıyorsanız veya sadece makineler düzeyinde sayıların nasıl temsil edildiğini anlamaya çalışıyorsanız, ikili değerleri C# içine nasıl alacağınızı ve bunları okunabilir bir formatta nasıl göstereceğinizi bilmelisiniz.

Tim Corey, "C#'de İkili Değerleri Depolama ve Görüntüleme" adlı videosunda ikili serinin üçüncü dersini ele alıyor. 0b öneki kullanarak ikili literalleri nasıl depolayacağını, tamsayıları binary dize gösterimine Convert.ToString() ile nasıl dönüştüreceğini ve temiz formatlama için çıktıyı başta sıfırlarla nasıl dolduracağını gösteriyor. Eğer C#'te ikili seriyi takip ediyorsanız veya düşük seviyeli veri üzerinde çalışıyorsanız, bu, pratik mekanikleri kapsar.

C# ile İkili Literalleri Saklama

[0:00 - 1:50] Tim'in yanıtladığı ilk soru basit: Bir ikili sayıyı C# değişkenine nasıl koyarsınız? Cevap, derleyiciye rakamları varsayılan taban 10 yerine taban 2 olarak yorumlamasını söyleyen 0b ön ekidir.

// Store binary 1001 (which is 9 in decimal)
int binaryValue = 0b1001;
// Store binary 1001 (which is 9 in decimal)
int binaryValue = 0b1001;

Öneki olmadan 1001, bin bir olarak yorumlanır. 0b ile bu dört ikili basamak olarak değerlendirilir ve onluk değeri 9'u temsil eder. Başta sıfırların bulunması zorunlu değildir. 0b00001001 yazmak 0b1001 ile aynıdır, ancak daha uzun form, belirli bit genişlikleriyle çalışırken bit pozisyonlarını okumayı kolaylaştırabilir.

Değişken tipi standart bir int'tir. Negatif değerlere ihtiyacınız yoksa uint (işaretsiz tamsayı) veya 64-bit depolama için long kullanabilirsiniz. İkili literal söz dizimi, tüm tam sayı türleriyle çalışır.

Sayıları İkili Olarak Gösterme

[1:50 - 3:48] İkili bir değeri depolamak başka bir şeydir. Ekranda onu ikili olarak görmek başka bir şeydir. Bir int'i Console.WriteLine ile yazdırdığınızda, C# temel 10 gösterimini verir. 0b1001 için bu, 1001 değil, 9 görmeniz anlamına gelir.

Ikili dize gösterimini elde etmek için, taban parametresi ile Convert.ToString() kullanın:

int binaryValue = 0b1001;

// Convert to binary string (base 2)
string representation = Convert.ToString(binaryValue, 2);

Console.WriteLine($"Base 10: {binaryValue}");      // Output: 9
Console.WriteLine($"Base 2: {representation}");     // Output: 1001
int binaryValue = 0b1001;

// Convert to binary string (base 2)
string representation = Convert.ToString(binaryValue, 2);

Console.WriteLine($"Base 10: {binaryValue}");      // Output: 9
Console.WriteLine($"Base 2: {representation}");     // Output: 1001

Convert.ToString()'in ikinci argümanı çıktı tabanını belirtir. Desteklenen değerler 2 (ikili), 8 (sekizli), 10 (ondalık) ve 16 (onaltılık) şeklindedir. Tim, 2 tabanını gösterir, ancak aynı yöntem tüm dördünü de halleder.

Sıfırla Başlangıç Doldurma

[3:48 - 5:24] Convert.ToString(binaryValue, 2)'in ham çıktısı başta sıfırları atlar. 0b1001 için, sonuç "00001001" değil, "1001" dizesidir. Baytlar (8 bit), 16 bit değerler veya 32 bit kayıtlarla çalışırken, baştaki sıfırlar ile tam genişliği görmek, bit pozisyonlarını hemen netleştirir.

Çözüm PadLeft():

// Pad to 8 characters (one byte) with leading zeros
string padded = Convert.ToString(binaryValue, 2).PadLeft(8, '0');

Console.WriteLine(padded);  // Output: 00001001
// Pad to 8 characters (one byte) with leading zeros
string padded = Convert.ToString(binaryValue, 2).PadLeft(8, '0');

Console.WriteLine(padded);  // Output: 00001001

PadLeft(8, '0') çıktının en az 8 karakter uzunluğunda olmasını sağlar, eksik olan pozisyonları '0' karakteri ile soldan doldurur. Tim, ikinci argümanın bir karakter (tek tırnaklar) ve bir dize olmadığını belirtir. Bu, sayı sıfır değil, karakter sıfırdır, çünkü PadLeft tek tek karakterlerden bir dize oluşturur.

16-bit bir temsil için, 8'i 16 ile değiştirin. Tam bir 32-bit tam sayı için, 32 kullanın. Doldurma genişliği düşündüğünüz bit genişliği ile eşleşmelidir.

Herhangi Bir Tamsayıyı İkiliye Dönüştürme

[5:24 - 7:28] Tim gözden kaçırılması kolay bir noktaya dikkat çekiyor: bir değerin ikili gösterimini görmek için onu ikili bir literal olarak depolamanıza gerek yoktur. Herhangi bir tamsayı aynı Convert.ToString() yaklaşımı kullanılarak ikili çıktıya dönüştürülebilir:

// A regular base 10 integer
int decimalValue = 12;

// Convert to padded binary string
string binary = Convert.ToString(decimalValue, 2).PadLeft(8, '0');

Console.WriteLine($"Decimal: {decimalValue}");  // Output: 12
Console.WriteLine($"Binary: {binary}");          // Output: 00001100
// A regular base 10 integer
int decimalValue = 12;

// Convert to padded binary string
string binary = Convert.ToString(decimalValue, 2).PadLeft(8, '0');

Console.WriteLine($"Decimal: {decimalValue}");  // Output: 12
Console.WriteLine($"Binary: {binary}");          // Output: 00001100

0b öneki, zaten bir ikili değere sahip olduğunuzda ve onu ikili formda girmek istediğinizde kullanılır. Normal tamsayılar için, Convert.ToString() dönüşümü yapar. Her iki yol da aynı temel değer için aynı sonucu üretir.

C# Tamsayıları Bellekte Nasıl Depolar

[7:28 - 9:20] Tim, C#'in tamsayıları dahili olarak nasıl depoladığına dair bir detayla sonlandırıyor. C# dilinde int, 32-bit işaretli tamsayı olan System.Int32 için bir takma addır. Bu, tam sayıların değeri ne kadar küçük olursa olsun bellek içinde 32 bit yer kapladığı anlamına gelir. 0b1001 (sayı 9) kaydetmek, 0b01111111111111111111111111111111 (iki milyardan fazla) kaydetmekle aynı 32 biti kullanır.

// What's actually stored in memory for binaryValue = 0b1001
// 00000000 00000000 00000000 00001001
string fullRepresentation = Convert.ToString(binaryValue, 2).PadLeft(32, '0');
Console.WriteLine(fullRepresentation);
// What's actually stored in memory for binaryValue = 0b1001
// 00000000 00000000 00000000 00001001
string fullRepresentation = Convert.ToString(binaryValue, 2).PadLeft(32, '0');
Console.WriteLine(fullRepresentation);

Bu, doğru tür boyutunu seçmenin neden önemli olduğunu açıklar. Bir long (Int64), bellek alanını iki katına çıkararak 64 bit kullanır. Çoğu uygulama için int (32 bit), ihtiyaç duyduğunuz aralığı kapsar. Ancak, bellek kısıtlamalı ortamlarda çalışıyorsanız veya milyonlarca değeri işliyorsanız, byte (8 bit), short (16 bit), int (32 bit) ve long (64 bit) arasındaki fark önemli hale gelir.

Sonuçlandırma: Tam Desen

[9:07 - 9:15] C#'de ikili ile çalışmanın tam deseni kısadır. İkili girişiniz olduğunda, değerleri 0b öneki kullanarak saklayın. Ham çıktı için onları Convert.ToString(value, 2) kullanarak görüntüleyin. Sabit genişlikte formatlama gerektiğinde .PadLeft(width, '0') ekleyin. Ve unutmayın ki, altta yatan depolama her zaman standart bir tamsayı tipidir ve bit genişliği, byte, short, int veya long seçeneklerinden hangisini seçtiğinize göre belirlenir.

Sonuç

[9:15 - 9:20] Özetlemek gerekirse: ikili literaller 0b öncülünü kullanır, Convert.ToString(value, 2) ikili dize üretir ve PadLeft() sabit genişlikte gösterim için başta sıfırları ekler. Değer, perde arkasında düzenli bir tamsayı türünde depolanır ve bir int, numaranın büyüklüğünden bağımsız olarak her zaman 32 bit yer kaplar.

Bu yapı taşları, serinin sonraki derslerinde, ikili değerlerin bit düzeyinde işlemler için düzgün bir şekilde biçimlendirilmesi gerektiği yerlerde ortaya çıkar.

Örnek İpucu: Bit işlemlerini ayıklarken, ikili çıktınızı türünüzün tam genişliğine kadar doldurun (byte için 8, short için 16, int için 32). Bit pozisyonlarının tümünü bir arada görmek, kaydırma ve maskeleme işlemlerini izlemeyi çok daha kolay hale getirir. string ToBinary(int val) => Convert.ToString(val, 2).PadLeft(32, '0'); gibi bir yardımcı yöntem tekrarlanan yazmayı önler.

Full videoyu YouTube Kanalında izleyerek, C#'ta ikili sistemi anlamaya dair daha fazla bilgi edinin.

Hero Worlddot related to C#'ta İkili Değerleri Depolama ve Gösterme
Hero Affiliate related to C#'ta İkili Değerleri Depolama ve Gösterme

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara