안녕하세요 C#으로 이진법 변환 폼을 만들어볼려합니다. 잘안되는데 도움부탁드립니다.
10진수 2진수 8진수 16진 텍스트박스를 만듭니다. 10진수 텍스트박스에 decimal 값을 입력하고 변환 버튼 클릭하면 2진수 8진수 16진수 텍스트 박스에 변환된 값이 출력되는 것입니다.
진수변환 함수를 안써보고 만들어볼려합니다. 그리고 int자료형 보다 decimal 자료형을 써볼려고합니다. 효율이 떨어지기는 하지만
일단 제가 생각하는 것은 배열을 만든 후 배열 값에 나머지를 추가하고 마지막 값은 decimal값을 넣고 배열을 역순출력을 할려합니다.
밑에는 제가짜본 코딩인데 잘안되서 오류가 어딘지좀 알려주시면 감사하겠습니다.
private void Convert_Click(object sender, EventArgs e)
{
decimal mod, deci = decimal.Parse(Dec.Text.ToString());
List num = new List();
while (deci != 0)
{
mod = deci % 2;
num.Add(mod);
deci /= 2;
}
num.Reverse(); Binary.Text = "";
foreach (int j in num) { Binary.Text += num[j] + " "; }
}
}
}
답변
1. 어떤 부분에서 어떻게 오류가 있는지를 말씀해주시는 편이 좋습니다.
예를 들면 "잘 안 된다"라는 것은 좋지 못한 설명이고, "10진수 5를 넣어보았는데 101이 출력되지 않습니다."라고 하면 좋은 설명입니다.
2. decimal은 기본적으로 실수 연산을 합니다. 10을 넣었다고 쳐보죠. 코드 중간에 while (deci != 0)이라는 확인 조건문이 있습니다.
만약 10을 집어넣었다고 치면, 반씩 줄어들게 되니, 10은 5가 될 것입니다. 그런데 그 절반은 얼마인가요?
아마 정수형 나눗셈의 결과를 기대하고 2를 말씀하셨을 수도 있으나, 말씀드렸듯 decimal에 대한 나눗셈은 실수 연산입니다. 2.5가 나옵니다.
같은 방식으로, 1을 2로 몇 번 나눈다고 쳐도 0.5, 0.25, 0.125, ...와 같은 식으로 나오지, 어지간해서는 0이 나오지 않습니다.
실제로는 부동소수점의 표현 범위때문에 결국 0이 나오게는 됩니다만 어찌되건 의도하는 결과는 아닙니다.
그런 측면에서 연구해보셔요. 사실 그냥 int를 쓰시는 걸 추천합니다.
3. 해결은 하지 않고, 코딩에 관한 주석만 달았습니다. 참조하세요.
저는 이렇게 생각했습니다.
부족하고 편하게 알생각만한것같습니다.반성하겠습니다.
항상 부족하다고 생각해야하는데 제가 편하게만 답을 얻을려고 하는것같았씁니다. 죄송하고 감사합니다. 주석다는 습관을 들여야겟네요
댓글 달기