IRONSOFTWAREHOME

Przechowywanie i wyświetlanie wartości binarnych w C#

Przechowywanie i wyświetlanie wartości binarnych w C#

Tim Corey

9m 20s

Binary to sposób, w jaki komputery faktycznie przechowują i przetwarzają dane, ale C# domyślnie używa bazy 10 dla wszystkiego, co widzisz na ekranie. Jeśli pracujesz z flagami bitowymi, protokołami sieciowymi, rejestrami sprzętowymi lub po prostu próbujesz zrozumieć, jak liczby są reprezentowane na poziomie maszyny, musisz wiedzieć, jak wprowadzać wartości binarne do C# i jak je wyświetlać w czytelnej formie.

W swoim wideo "Storing and Displaying Binary Values in C#", Tim Corey omawia trzecią lekcję w swojej serii o binarnym kodowaniu. Demonstruje, jak przechowywać literały binarne używając prefiksu 0b, jak konwertować liczby całkowite do ich binarnej reprezentacji łańcuchowej za pomocą Convert.ToString(), oraz jak dodawać zera wiodące do wyjścia dla estetycznego formatowania. Jeżeli śledzisz serię o kodowaniu binarnym lub pracujesz z danymi na niskim poziomie w C#, ta lekcja pokrywa praktyczne aspekty mechaniki.

Przechowywanie Literałów Binarnych w C#

[0:00 - 1:50] Pierwsze pytanie, które porusza Tim, jest proste: jak wprowadzić liczbę binarną do zmiennej w C#? Odpowiedzią jest prefiks 0b, który każe kompilatorowi interpretować cyfry jako liczbę w bazie 2, zamiast domyślnie w bazie 10.

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

Bez prefiksu, 1001 byłoby interpretowane jako tysiąc jeden. Z 0b, jest traktowane jako cztery cyfry binarne reprezentujące wartość dziesiętną 9. Zera wiodące są opcjonalne. Zapis 0b00001001 jest identyczny z 0b1001, ale dłuższa forma może ułatwić odczyt pozycji bitów, gdy pracujesz z konkretnymi szerokościami bitowymi.

Typ zmiennej to standardowy int. Można również użyć uint (liczba całkowita nieznakowana), jeśli nie potrzebujesz wartości ujemnych, lub long dla przechowywania 64-bitowego. Składnia literału binarnego działa z każdym z typów całkowitoliczbowych.

Wyświetlanie Liczb w Formacie Binarnym

[1:50 - 3:48] Przechowywanie wartości binarnej to jedno. Zobaczenie jej w formacie binarnym na ekranie to co innego. Gdy wydrukujesz int z Console.WriteLine, C# wyprowadza reprezentację w podstawie 10. Dla 0b1001, oznacza to, że widzisz 9, a nie 1001.

Aby uzyskać reprezentację łańcuchową binarną, użyj Convert.ToString() z parametrem podstawy:

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
C#

Drugi argument dla Convert.ToString() określa podstawę wyjściową. Obsługiwane wartości to 2 (binarny), 8 (oktalny), 10 (dziesiętny) i 16 (heksadecymalny). Tim demonstruje bazę 2, ale ta sama metoda obsługuje wszystkie cztery.

Dodawanie Zer Wiodących

[3:48 - 5:24] Surowe wyjście Convert.ToString(binaryValue, 2) pomija zera wiodące. Dla 0b1001, wynikiem jest łańcuch "1001", a nie "00001001". Gdy pracujesz z bajtami (8 bitów), 16-bitowymi wartościami czy rejestrami 32-bitowymi, widząc pełną szerokość z zerami wiodącymi, ułatwiasz natychmiastowy odczyt pozycji bitów.

Poprawka to PadLeft():

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

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

PadLeft(8, '0') zapewnia, że wyjście ma co najmniej 8 znaków długości, wypełniając jakiekolwiek brakujące pozycje po lewej znakiem '0'. Tim zauważa szczegół, że drugi argument to char (pojedyncze cudzysłowy), a nie łańcuch. To znak zero, a nie liczba zero, ponieważ PadLeft buduje łańcuch z pojedynczych znaków.

Dla reprezentacji 16-bitowej, zmień 8 na 16. Dla pełnego całkowitoliczbowego 32-bitowego, użyj 32. Szerokość zer powinna odpowiadać szerokości bitowej, nad którą się zastanawiasz.

Konwersja Każdego Licznika Całkowitego na Binarny

[5:24 - 7:28] Tim zauważa coś, co łatwo przeoczyć: nie musisz przechowywać wartości jako literału binarnego, aby zobaczyć jej reprezentację binarną. Każda liczba całkowita może zostać skonwertowana na wyjście binarne używając tego samego podejścia Convert.ToString():

// 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
C#

Prefiks 0b jest dla sytuacji, gdy już masz wartość binarną i chcesz ją wprowadzić w formie binarnej. Dla zwykłych liczb całkowitych Convert.ToString() obsługuje konwersję. Obie ścieżki dają ten sam wynik dla tej samej wartości bazowej.

Jak C# Przechowuje Liczniki Całkowite w Pamięci

[7:28 - 9:20] Tim kończy detalem na temat tego, jak C# przechowuje liczniki całkowite wewnętrznie. Int w C# jest aliasem dla System.Int32, 32-bitowego licznika całkowitego znakowanego. Oznacza to, że każdy int zajmuje 32 bity w pamięci, niezależnie od tego, jak mała jest wartość. Przechowywanie 0b1001 (liczby 9) zajmuje te same 32 bity, co przechowywanie 0b01111111111111111111111111111111 (ponad dwóch miliardów).

// 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);
C#

To łączy się z tym, dlaczego ważne jest wybieranie odpowiedniego rozmiaru typu. Long (Int64) używa 64 bitów, podwajając rozmiar pamięci. Dla większości aplikacji, int (32 bity) pokrywa zakres, którego potrzebujesz. Ale jeśli pracujesz w środowiskach z ograniczoną pamięcią lub przetwarzasz miliony wartości, różnica między bajtem (8 bitów), short (16 bitów), int (32 bity) i long (64 bity) staje się istotna.

Podsumowanie: Kompletny Wzór

[9:07 - 9:15] Pełny wzór dla pracy z binarnymi w C# jest zwięzły. Przechowuj wartości używając prefiksu 0b, gdy masz dane wejściowe binarne. Wyświetl je używając Convert.ToString(value, 2) dla surowego wyjścia. Dodaj .PadLeft(width, '0'), gdy potrzebujesz formatowania ze stałą szerokością. I pamiętaj, że podstawa w jakiej są przechowywane to zawsze standardowy typ licznika całkowitego, z szerokością bitów określoną przez to, czy wybierasz bajt, short, int, czy long.

Wnioski

[9:15 - 9:20] Podsumowując: literały binarne używają prefiksu 0b, Convert.ToString(value, 2) tworzy łańcuch binarny, a PadLeft() dodaje zera wiodące dla wyświetlania o stałej szerokości. Wartość jest przechowywana w zwykłym typie licznikowym, a int zawsze zajmuje 32 bity niezależnie od wielkości liczby.

Te elementy budulcowe pojawiają się w następnych lekcjach serii, gdzie wartości binarne muszą być poprawnie formatowane dla operacji bitowych.

Porada przykład: Podczas debugowania operacji bitowych, dodaj do swojego wyjścia binarnego pełną szerokość twojego typu (8 dla bajtu, 16 dla short, 32 dla int). Widzenie wszystkich pozycji bitowych naraz ułatwia śledzenie operacji przesunięcia i maski. Metoda pomocnicza jak string ToBinary(int val) => Convert.ToString(val, 2).PadLeft(32, '0'); oszczędza powtarzające się pisanie.

Obejrzyj pełne wideo na jego YouTube Kanale i zdobądź więcej informacji na temat zrozumienia binarnego w C#.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta