跳至頁尾內容
Iron Academy Logo
學習C#
學習C#

其他類別

在C#中儲存和顯示二進制值

[[academy-video-youtube({"vid": "xkZa6IyqNwg", "start_time": "0", "title": "在C#中儲存和顯示二進制值", "creator": "Tim Corey", "length": "9m 20s"})]]

二進制是計算機實際儲存和處理資料的方式,但C#預設使用十進制顯示螢幕上的一切。 如果您正在處理位標誌、網路協議、硬體寄存器,或者只是試圖了解在機器層級上數字是如何表示的,您需要知道如何將二進制值導入C#並以可讀格式顯示它們。

在他的影片"在C#中儲存和顯示二進制值"中,Tim Corey講述了他的二進制系列中的第三課。 他演示了如何使用0b前綴儲存二進制字面值,如何使用Convert.ToString()將整數轉換為其二進制字串表示,還演示了如何在輸出中新增前導零以實現格式化清晰。 如果您在跟隨二進制系列或在C#中處理底層資料,這涵蓋了實際的機制。

在C#中儲存二進制字面值

[0:00 - 1:50] Tim處理的第一個問題很直截了當:如何將二進制數字放入C#變數中? 答案是使用0b前綴,它告訴編譯器將數位解釋為二進制而不是預設的十進制。

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

如果沒有前綴,1001將被解釋為一千零一。 使用0b時,它被視為四個二進制數位,代表十進制值9。前導零是可選的。 撰寫0b00001001與0b1001相同,但較長的形式可以在處理特定位寬時使位位置更容易讀懂。

變數型別是標準的int。 如果您不需要負值,您也可以使用uint(無符號整數),或使用long儲存64位資料。 二進制字面值語法適用於任何整數型別。

以二進制顯示數字

[1:50 - 3:48] 儲存二進制值是一回事。 以二進制顯示在螢幕上是另一回事。 當您列印int與Console.WriteLine時,C#輸出的是十進制表示。 對於0b1001,這意味著您看到的是9,而不是1001。

要獲得二進制字串表示,請使用Convert.ToString()並帶有一個基準參數:

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()的第二個參數指定輸出基準。 支持的值有2(二進制)、8(八進制)、10(十進制)和16(十六進制)。 Tim示範了二進制的使用,但相同的方法適用於所有四種。

用前導零填充

[3:48 - 5:24] Convert.ToString(binaryValue, 2)的原始輸出省略了前導零。 對於0b1001,結果是字串"1001",而不是"00001001"。 當您處理位元組(8位)、16位值或32位寄存器時,看到完整的寬度及前導零使位位置立即清晰。

解決方法是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')確保輸出至少有8個字元長,將缺失的位置用字元'0'填充。 Tim指出的細節是第二個參數是一個字元(單引號),而不是字串。 這是字元零,不是數字零,因為PadLeft從個別字元構建字串。

對於16位表示,將8變為16。對於完整的32位整數,使用32。填充寬度應與您正在使用的位寬度匹配。

將任何整數轉換為二進制

[5:24 - 7:28] Tim提出了一個容易被忽視的觀點:您不必將值儲存為二進制字面值即可看到其二進制表示。 任何整數都可以使用同樣的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
// 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前綴是當您已有二進制值並想以二進制形式輸入時使用。 對於普通整數,Convert.ToString()處理轉換。 對於相同的基本值,這兩種方式的結果相同。

C#如何在記憶體中儲存整數

[7:28 - 9:20] Tim以C#如何內部儲存整數的細節結尾。 在C#中,int是System.Int32的別名,是一個32位有符號整數。 這意味著每個int在記憶體中佔用32位,不管值有多小。 儲存0b1001(數字9)使用與儲存0b01111111111111111111111111111111(超過二十億)相同的32位。

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

這與為什麼選擇正確的型別大小很重要有聯繫。 一個long(Int64)使用64位,使記憶體佔用翻倍。 對於大多數應用程式,int(32位)涵蓋您需要的範圍。 但如果您在記憶體受限的環境中工作或處理數百萬個值,byte(8位)、short(16位)、int(32位)和long(64位)之間的差異就變得重要。

結束:完整模式

[9:07 - 9:15] 在C#中處理二進制的完整模式很簡潔。當有二進制輸入時,使用0b前綴儲存值。 使用Convert.ToString(value, 2)顯示它們以獲取原始輸出。 當需要固定寬度格式時,新增.PadLeft(width, '0')。 並記住,底層儲存始終是一個標準整數型別,位寬取決於您選擇的byte、short、int或long。

結論

[9:15 - 9:20] 總結一下:二進制字面值使用0b前綴,PadLeft()新增前導零以進行固定寬度顯示。 值在內部是以常規整數型別儲存,而int始終佔用32位,無論數字大小如何。

這些構建塊將出現在系列中的下一個課程中,那裡需要正確格式化二進制值以進行位運算。

範例提示:在除錯位運算時,將二進制輸出填充到型別的全寬(byte的8位,short的16位,int的32位)。 一次看到所有的位位置使得位移和遮罩操作更容易追蹤。 像string ToBinary(int val) => Convert.ToString(val, 2).PadLeft(32, '0');這樣的輔助方法可以節省重複輸入。

在他的YouTube頻道觀看完整影片,獲得更多有關理解C#中二進制的見解。

Hero Worlddot related to 在C#中儲存和顯示二進制值
Hero Affiliate related to 在C#中儲存和顯示二進制值

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話