푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 배우기
C# 배우기

다른 카테고리

C#에서 이진 값을 저장하고 표시하기

[[academy-video-youtube({"vid": "xkZa6IyqNwg", "start_time": "0", "title": "C#에서 이진수 저장 및 표시", "creator": "Tim Corey", "length": "9m 20s"})]]

이진수는 컴퓨터가 실제로 데이터를 저장하고 처리하는 방법이지만, C#은 화면에 보이는 모든 것에 대해 기본적으로 10진수를 사용합니다. 비트 플래그, 네트워크 프로토콜, 하드웨어 레지스터 또는 숫자가 기계 수준에서 어떻게 표현되는지 이해하려고 할 때, C#에서 이진 값을 얻고 이를 읽기 쉽도록 표시하는 방법을 알아야 합니다.

그의 비디오 "C#에서 이진 값 저장 및 표시"에서 Tim Corey는 그의 이진 시리즈에서 세 번째 강의를 다룹니다. 그는 0b 접두사를 사용하여 이진 리터럴을 저장하는 방법, Convert.ToString()로 정수를 이진 문자열 표현으로 변환하는 방법, 및 깔끔한 포맷을 위한 선행 0으로 출력 패딩하는 방법을 보여줍니다. 이진 시리즈를 따르거나 C#에서 저수준 데이터 작업을 하는 경우, 이는 실질적인 메커니즘을 다루고 있습니다.

C#에서 이진 리터럴 저장

[0:00 - 1:50] 팀이 해결하는 첫 번째 질문은 간단합니다: C# 변수에 이진수를 넣는 방법은 무엇입니까? 답은 0b 접두사로, 이는 컴파일러가 숫자를 기본인 10진수 대신 기수 2로 해석하도록 지시합니다.

// 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를 나타냅니다. 선행 0은 선택 사항입니다. 0b00001001을 작성하는 것은 0b1001과 동일하지만, 특정 비트 폭을 다룰 때 비트 위치를 읽기 쉽게 만드는 데 더 긴 형태를 사용할 수 있습니다.

변수 유형은 표준 int입니다. 음수가 필요하지 않은 경우 uint (부호 없는 정수)를 사용할 수도 있고, 64비트 저장을 위해 long을 사용할 수도 있습니다. 이진 리터럴 구문은 모든 정수 유형과 함께 작동합니다.

이진으로 숫자 표시

[1:50 - 3:48] 이진 값을 저장하는 것은 한 가지입니다. 화면에서 이진으로 보는 것은 또 다른 것 입니다. C#는 Console.WriteLine로 정수를 출력할 때 10진수 표현을 출력합니다. 0b1001의 경우, 이는 1001이 아닌 9가 보인다는 의미입니다.

이진 문자열 표현을 얻으려면 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 (십육진수)입니다. 팀은 기수 2를 시연하지만, 동일한 방법이 네 가지 모두를 처리합니다.

선행 0으로 패딩

[3:48 - 5:24] Convert.ToString(binaryValue, 2)의 원시 출력은 선행 0을 생략합니다. 0b1001의 경우, 결과는 문자열 "1001"이며, "00001001"이 아닙니다. 바이트(8비트), 16비트 값 또는 32비트 레지스터를 다룰 때, 선행 0으로 전체 폭을 보는 것은 비트 위치를 즉시 명확하게 합니다.

수정은 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' 문자로 모든 누락된 위치를 채우도록 합니다. 팀은 두 번째 인수가 문자열이 아닌 문자(단일 인용 부호)임을 주목합니다. PadLeft는 개별 문자를 사용하여 문자열을 구성하기 때문에 숫자 0이 아니라 문자 0입니다.

16비트 표현의 경우, 8을 16으로 변경하십시오. 전체 32비트 정수의 경우, 32를 사용하십시오. 패딩 폭은 고려하고 있는 비트 폭과 일치해야 합니다.

모든 정수를 이진으로 변환

[5:24 - 7:28] 팀은 간과하기 쉬운 점을 지적합니다: 이진 리터럴로 값을 저장하지 않아도 이진 표현을 볼 수 있습니다. 모든 정수는 동일한 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] 팀은 C#이 내부에서 정수를 저장하는 방법에 대한 세부 사항으로 마무리합니다. C#의 int는 System.Int32의 별칭이며, 이는 32비트 부호 있는 정수입니다. 따라서 모든 int는 값이 얼마나 작든 간에 메모리에 32비트를 차지합니다. 0b1001(숫자 9)을 저장할 때도 0b01111111111111111111111111111111(20억 이상)을 저장할 때와 동일한 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 접두사를 사용하고, Convert.ToString(value, 2)는 이진 문자열을 생성하며, PadLeft()는 고정 폭 디스플레이를 위해 선행 0을 추가합니다. 값은 내부적으로 일반 정수 유형에 저장되며, int는 항상 숫자의 크기에 관계없이 32비트를 차지합니다.

이러한 빌딩 블록은 시리즈의 다음 레슨에서 비트 연산에 적합한 형식을 갖춰야 할 때 등장합니다.

예시 팁: 비트별 연산을 디버깅할 때, 이진 출력을 타입의 전체 너비로 패딩하세요(바이트는 8, 쇼트는 16, 인트는 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를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해