반응형
진법의 의미
진법이란 몇 개의 기본 숫자를 이용하여 수를 표시하는 방법으로 자릿값이 올라감에 따라 수가 일정하게 커지는 규칙을 이용하여 수를 표시하는 것을 말한다. 오늘날에는 인도-아라비아 숫자를 사용하므로 0부터 9까지의 기본 숫자 또는 이 숫자 중 일부를 이용한 십진법, 이진법, 오진법 등으로 수를 표시한다.
10진수를 X진수로 변환
바꾸고 싶은 진수의 숫자로 더 이상 나눌 수 없을 때까지 나눈 뒤 몫과 나머지를 역순으로 읽는다.
그림과 같이 12를 3진법으로 변환한다하면 12를 3으로 나누기를 하면서 목을 나눌수 없을때까지 반복후
몫과 나머지를 화살표 방향처럼 읽어주면 해당 진법으로 변환된 수가 된다.
C# 으로 구현해본 10진수를 X진수로 변환 코드보기
더보기
public string Convert10ToX(int num, int arithmetic)
{
int number = num;
string result = "";
while (true)
{
var quotient = num / arithmetic; // 몺
var remainder = num % arithmetic; // 나머지
num = quotient; // 몫을 다시 계산하기 위해서 값에 넣는다.
string value = "";
if (arithmetic > 10)
{
if (remainder == 10) value = "a";
else if (remainder == 11) value = "b";
else if (remainder == 12) value = "c";
else if (remainder == 13) value = "d";
else if (remainder == 14) value = "e";
else if (remainder == 15) value = "f";
else if (remainder == 16) value = "g";
else if (remainder == 17) value = "h";
else if (remainder == 18) value = "i";
else if (remainder == 19) value = "j";
else if (remainder == 20) value = "k";
else if (remainder == 21) value = "l";
else if (remainder == 22) value = "m";
else if (remainder == 23) value = "n";
else if (remainder == 24) value = "o";
else if (remainder == 25) value = "p";
else if (remainder == 26) value = "q";
else if (remainder == 27) value = "r";
else if (remainder == 28) value = "s";
else if (remainder == 29) value = "t";
else if (remainder == 30) value = "u";
else if (remainder == 31) value = "v";
else if (remainder == 32) value = "w";
else if (remainder == 33) value = "x";
else if (remainder == 34) value = "y";
else if (remainder == 35) value = "z";
else
{
value = remainder.ToString();
}
}
else
{
value = remainder.ToString();
}
result += value;
if (num < arithmetic)
{
string value2 = "";
if (quotient == 10) value2 = "a";
else if (quotient == 11) value2 = "b";
else if (quotient == 12) value2 = "c";
else if (quotient == 13) value2 = "d";
else if (quotient == 14) value2 = "e";
else if (quotient == 15) value2 = "f";
else if (quotient == 16) value2 = "g";
else if (quotient == 17) value2 = "h";
else if (quotient == 18) value2 = "i";
else if (quotient == 19) value2 = "j";
else if (quotient == 20) value2 = "k";
else if (quotient == 21) value2 = "l";
else if (quotient == 22) value2 = "m";
else if (quotient == 23) value2 = "n";
else if (quotient == 24) value2 = "o";
else if (quotient == 25) value2 = "p";
else if (quotient == 26) value2 = "q";
else if (quotient == 27) value2 = "r";
else if (quotient == 28) value2 = "s";
else if (quotient == 29) value2 = "t";
else if (quotient == 30) value2 = "u";
else if (quotient == 31) value2 = "v";
else if (quotient == 32) value2 = "w";
else if (quotient == 33) value2 = "x";
else if (quotient == 34) value2 = "y";
else if (quotient == 35) value2 = "z";
else
{
value2 = quotient.ToString();
}
result += value2.ToString();
break;
}
}
var answer = string.Join("", result.Reverse());
Console.WriteLine($"{number}의 {arithmetic}진수 값은 : {answer}");
return answer;
}
* 10진수 이상 부터는 a~z 까지의 알파벳으로 표현
* 알파벳으로 표현가능한 36진수까지 가능
X진수를 10진수로 변환
변환하려는 진수의 자리값과 진수의 자릿수에따른 지승을 곱한값을 더한다.
C# 으로 구현해본 X진수를 10진수로 변환 코드보기
더보기
public int ConvertXTo10(string number, int arithmetic)
{
int answer = 0;
var idx = number.Length;
for (var i = 0; i < number.Length; i++)
{
var pow = (int)Math.Pow(arithmetic, --idx); // 지승값을 구하기
string num = number[i].ToString().ToLower();
if (number[i] == 'a') num = "10";
else if (number[i] == 'b') num = "11";
else if (number[i] == 'c') num = "12";
else if (number[i] == 'd') num = "13";
else if (number[i] == 'e') num = "14";
else if (number[i] == 'f') num = "15";
else if (number[i] == 'g') num = "16";
else if (number[i] == 'h') num = "17";
else if (number[i] == 'i') num = "18";
else if (number[i] == 'j') num = "19";
else if (number[i] == 'k') num = "20";
else if (number[i] == 'l') num = "21";
else if (number[i] == 'm') num = "22";
else if (number[i] == 'n') num = "23";
else if (number[i] == 'o') num = "24";
else if (number[i] == 'p') num = "25";
else if (number[i] == 'q') num = "26";
else if (number[i] == 'r') num = "27";
else if (number[i] == 's') num = "28";
else if (number[i] == 't') num = "29";
else if (number[i] == 'u') num = "30";
else if (number[i] == 'v') num = "31";
else if (number[i] == 'w') num = "32";
else if (number[i] == 'x') num = "33";
else if (number[i] == 'y') num = "34";
else if (number[i] == 'z') num = "35";
answer += Convert.ToInt32(num) * pow; // 자릿수값 x 지승값 이 구하는 해 10진수
}
Console.WriteLine($"{arithmetic}진수 {number}의 10진수 값은 : {answer}");
return answer;
}
X진수를 Y진수로 변환
위 2가지 진법 변환과 같이 3진법 110를 을 5진법으로 변환한다면
첫번째, 3진법을 10진법으로 변환 한다. (3진수 110은 10진수 12)
다시 변환된 10진수 12를 가지고 5진법으로 변환한다. (10진수 12의 5진수는 22)
참고로, c#에서는 2,8,16 진수 변환은 메소드를 통해서 간단히 변환할수 있다.
- Convert.ToString(변환값, 진법); 10진수를 2,8,16진수 로 변환
- Convert.ToInt32(변환값, 진법); 2,8,16진수를 10진수로 변환
int value = 11;
Console.WriteLine("진수 변환 : " + value);
Console.WriteLine("10진수 -> 2진수 : " + Convert.ToString(value, 2));
Console.WriteLine("2진수 -> 10진수 : " + Convert.ToInt32(Convert.ToString(value, 2), 2));
Console.WriteLine("10진수 -> 8진수 : " + Convert.ToString(value, 8));
Console.WriteLine("8진수 -> 10진수 : " + Convert.ToInt32(Convert.ToString(value, 8), 8));
Console.WriteLine("10진수 -> 16진수 : " + Convert.ToString(value, 16));
Console.WriteLine("16진수 -> 10진수 : " + Convert.ToInt32(Convert.ToString(value, 16), 16));
반응형