2진수를 10진수로 변환하는 과정은 다음과 같다.
//진수 자릿수를 받아 8bit를 다 받으면 받은 2진수에 해당하는 char 출력하는 함수
void BinaryToDecimal(int binary)
{
static char ch = 0;//한번 정적으로 선언되었으니 이 함수를 다시 호출했을 때 초기화 x
static int index = 7;
ch += (binary << index--);//index만큼 오른쪽 shift하여 ch에 더한 후 index--
if (index < 0)
{
if (ch == 0)//ch가 0이면? 이에 대한 것은 따로 해야 할 듯. null로 하느냐 \\n으로 하느냐
{
write(1, "\\n", 1);
}
else//ch가 0이 아니면
{
write(1, &ch, 1);
}
index = 7;
ch = 0;
}
}
만약 01100001(’a’)를 10진수로 표현하기 위해 BinaryToDecimal(0);BinaryToDecimal(1)...BinaryToDecimal(1)을 호출한다고 가정해 보자.
우리는 이러한 2진수를 10진수로 표현하기 위해 아래와 같은 과정을 거칠 것이다.

위와 같이 진수와 2^자릿수를 곱해서 모두 더해 10진수로 나타낼 것이다.
이렇게 2^자릿수를 계산하는 것을 오른쪽 shift 연산자를 통해 나타내 보자.
‘a’는 2진수로 01100001이다. 우리는 이것을 계산하기 위해 (0 * 2^7) + (1 * 2^6) + (1 * 2^5) + (0 * 2^4) + (0 * 2^3) + (0 * 2^2) + (0 * 2^1) + (1 * 2^0)의 수식을 계산할 것이다.
위 식을 코드로 나타내 보면 아래와 같다.
static char ch = 0;
static int index = 7;
ch += (binary << index--);//index만큼 오른쪽 shift하여 ch에 더한 후 index--
인덱스를 제일 먼저 7로 선언해 준 뒤, index만큼 오른쪽 shift 연산한 결과를 ch에 더해준다.
만약 index가 0보다 작아진다면 8bit가 모두 전송된 것이므로 계산한 char를 출력한 뒤 다시 ch를 0, index를 7로 초기화해준다.