728x90
정수의 각 자리를 꺼내는 방법과 2진수 변환은 모두 나눗셈의 몫과 나머지에서 시작한다. 8자리 숫자의 합, 10진수→2진수, 2진수 문자열→10진수를 라이브러리 풀이와 직접 구현으로 비교한다.
관계: 10으로 나눈 나머지는 마지막 십진수 자리, 2로 나눈 나머지는 마지막 이진수 자리다.

10진수 77을 2로 반복해 나누고 나머지를 거꾸로 읽어 1001101을 만드는 과정
1. 마지막 자리를 더하고 제거한다
static int digitSum(int number) {
number = Math.abs(number);
int sum = 0;
do {
sum += number % 10;
number /= 10;
} while (number > 0);
return sum;
}
원문 16은 8자리 정수를 대상으로 했지만 알고리즘은 자릿수와 무관하다. do-while을 쓰면 입력이 0일 때도 한 번 처리되어 결과 0을 자연스럽게 반환한다.
2. 10진수를 2진수로 바꾸기
static String toBinary(int number) {
if (number == 0) return "0";
StringBuilder reversed = new StringBuilder();
while (number > 0) {
reversed.append(number % 2);
number /= 2;
}
return reversed.reverse().toString();
}
2로 나눈 나머지는 낮은 자리부터 나오므로 마지막에 순서를 뒤집는다. 실제 업무에서는 Integer.toBinaryString(number)가 더 간단하지만 직접 구현하면 원리를 확인할 수 있다.
728x90
3. 2진수 문자열을 10진수로 바꾸기
static int toDecimal(String binary) {
int result = 0;
for (int i = 0; i < binary.length(); i++) {
char bit = binary.charAt(i);
if (bit != '0' && bit != '1') {
throw new IllegalArgumentException("0과 1만 입력하세요.");
}
result = result * 2 + (bit - '0');
}
return result;
}
01001101을 왼쪽부터 읽으며 현재 값에 2를 곱하고 새 비트를 더한다. 매번 자릿값을 따로 계산하는 것보다 배열과 거듭제곱이 필요 없고 흐름도 단순하다.
4. 직접 구현과 표준 메서드 비교
| 목적 | 표준 메서드 | 직접 구현에서 배우는 것 |
|---|---|---|
| 10진수→2진수 | Integer.toBinaryString(n) |
나머지 역순 |
| 2진수→10진수 | Integer.parseInt(text, 2) |
위치값 누적 |
| 자리 합 | 직접 반복 | 마지막 자리 분리 |
정답 코드는 표준 메서드로 간단히 쓰고, 학습용 테스트에서 직접 구현 결과와 비교하면 두 방식의 장점을 모두 얻는다.
5. 실수하기 쉬운 부분
앞의 0을 숫자로 보존하려 한다
01001101의 앞 0은 정수값에는 의미가 없다. 표현 길이를 보존해야 한다면 문자열로 다룬다.
잘못된 문자를 허용한다
10201은 2진수가 아니다. 변환 전 모든 문자가 0 또는 1인지 검증한다.
큰 값을 int로 변환한다
문자열이 길면 int 범위를 넘는다. 필요하면 Long.parseLong이나 BigInteger를 사용한다.
핵심 요약
- 나머지는 마지막 자리, 몫은 남은 자리다.
- 10진수→2진수의 나머지는 역순으로 읽는다.
- 2진수→10진수는
result * 2 + bit로 누적한다. - 표현을 보존하려면 문자열로 다룬다.
728x90
'자격증·공부 아카이브 > Java 기초' 카테고리의 다른 글
| Java while문 실전: 목표 달성·덧셈 게임·종료 조건 (0) | 2026.08.02 |
|---|---|
| Java 반복문 누적 계산: 교대 합·수열·팩토리얼 풀이 (0) | 2026.08.01 |
| Java 배열 문제 풀이: 조건 필터링·배수·정렬·가장 가까운 두 수 (0) | 2026.07.30 |
| Java 메서드 예제 3가지: 계산기·가운데 글자·거듭제곱 구현 (0) | 2026.07.30 |
| Java 별찍기 완전정리: 이중 for문으로 삼각형·역삼각형·피라미드 출력 (0) | 2026.07.30 |