실습문제 1번
자바에서 10진수와 2진수, 8진수, 16진수를 어떻게 표현하는지 프로그래밍 하기
package binary;
public class BinaryTest
{
public static void main(String[] args)
{
int num = 10;
int numA = 0B1010; // 0B = 2진수 라는 뜻
int numB = 012; // 0으로 시작하면 = 8진수 라는 뜻
int numC = 0XA; // 0X = 16진수 라는 뜻, A는 10을 의미함
// 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16...
System.out.println(num);
System.out.println(numA);
System.out.println(numB);
System.out.println(numC);
}
}
numA 에서 값이 0B로 시작하면 2진수를 의미한다.
numB 에서 값이 0으로 시작하면 8진수를 의미한다.
numC 에서 값이 0X로 시작하면 16진수를 의미한다.
A는 16진수로 10을 의미한다.
예로. 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16처럼
16진수는 흘러간다.
실행결과

실습문제 2번
2진수의 연산을 프로그래밍하기
(한 값과 그 값의 2의 보수 값을 더했을때 0이 되는지 확인하기)
package binary;
public class BinaryTest2 {
public static void main(String[] args)
{
int num1 = 0B00000000000000000000000000000101; // 5 (32자리를 표현하고자함)
int num2 = 0B11111111111111111111111111111011; // 본래 끝이 010 이지만 1을 더해줬으므로 011로 맺음 = -5
int sum = num1 + num2;
System.out.println(num1 + "와 " + num2 + "를 더하면 " + sum + "이 된다.");
}
}
num1은 계산하고자하는 값을 2진수로 표현한 것이다. 뒤의 101을 연산하면 4 + 1 로 5가 된다.
num2는 num1을 2의 보수화 시키고 1을 더한 값이다.
이 두 값을 더했을때 0이 나오는지 확인하는 코드이다.
+++
2진수는 0 0 0 0 0 0 0 0 처럼 표현할 수 있는데 맨 앞의 숫자가 0이면 양의 수를 의미하고,
맨 앞의 숫자가 1이면 음의 수를 의미한다.
그렇다면
0 0 0 0 0 0 0 0 과 1 0 0 0 0 0 0 0 을 더하면 0이 되는가는 생각해볼만한 문제이다.
여기서 보수라는 개념이 등장하는데, 보수는 '보충되는 수'라고 생각하면 쉽다.
4의 10의 보수는 6이다. -> 4 + ? = 10
4에 어느 수를 더해 10이 되어야하는데, 부족한 값은 6이므로 보충되는 수로 6이 되는 것이다.
2의 보수화 과정은 이러하다.
1. 비트를 반대로 취해준다.
ex) 0 0 0 0 0 0 0 1 -> 1 1 1 1 1 1 1 0
이 두 값을 더하면 1 1 1 1 1 1 1 1 인데,
2. 이 더한 값에 1을 더해준다.
한자리씩 비트가 올라가며 자릿수가 올라간다. 맨 앞의 비트는 벗어나서 Truncate가 된다. (없는 수 취급)
결국 남는 수가 보수화를 한 값이 되는 것이다.
실행결과

'Programming > Java_자바' 카테고리의 다른 글
[JAVA 기초] 대중교통 이용 프로그램 만들기 (0) | 2021.12.08 |
---|---|
[JAVA 기초] 생성자 (0) | 2021.12.08 |
[JAVA 에센셜] 자바 코딩 연습_챕터4_실습문제 (0) | 2021.04.06 |
[JAVA 에센셜] 자바 코딩 연습_챕터3_실습문제 (0) | 2021.03.31 |
[JAVA 에센셜] 자바 코딩 연습_챕터2_실습문제 (0) | 2021.03.24 |
실습문제 1번
자바에서 10진수와 2진수, 8진수, 16진수를 어떻게 표현하는지 프로그래밍 하기
package binary;
public class BinaryTest
{
public static void main(String[] args)
{
int num = 10;
int numA = 0B1010; // 0B = 2진수 라는 뜻
int numB = 012; // 0으로 시작하면 = 8진수 라는 뜻
int numC = 0XA; // 0X = 16진수 라는 뜻, A는 10을 의미함
// 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16...
System.out.println(num);
System.out.println(numA);
System.out.println(numB);
System.out.println(numC);
}
}
numA 에서 값이 0B로 시작하면 2진수를 의미한다.
numB 에서 값이 0으로 시작하면 8진수를 의미한다.
numC 에서 값이 0X로 시작하면 16진수를 의미한다.
A는 16진수로 10을 의미한다.
예로. 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16처럼
16진수는 흘러간다.
실행결과

실습문제 2번
2진수의 연산을 프로그래밍하기
(한 값과 그 값의 2의 보수 값을 더했을때 0이 되는지 확인하기)
package binary;
public class BinaryTest2 {
public static void main(String[] args)
{
int num1 = 0B00000000000000000000000000000101; // 5 (32자리를 표현하고자함)
int num2 = 0B11111111111111111111111111111011; // 본래 끝이 010 이지만 1을 더해줬으므로 011로 맺음 = -5
int sum = num1 + num2;
System.out.println(num1 + "와 " + num2 + "를 더하면 " + sum + "이 된다.");
}
}
num1은 계산하고자하는 값을 2진수로 표현한 것이다. 뒤의 101을 연산하면 4 + 1 로 5가 된다.
num2는 num1을 2의 보수화 시키고 1을 더한 값이다.
이 두 값을 더했을때 0이 나오는지 확인하는 코드이다.
+++
2진수는 0 0 0 0 0 0 0 0 처럼 표현할 수 있는데 맨 앞의 숫자가 0이면 양의 수를 의미하고,
맨 앞의 숫자가 1이면 음의 수를 의미한다.
그렇다면
0 0 0 0 0 0 0 0 과 1 0 0 0 0 0 0 0 을 더하면 0이 되는가는 생각해볼만한 문제이다.
여기서 보수라는 개념이 등장하는데, 보수는 '보충되는 수'라고 생각하면 쉽다.
4의 10의 보수는 6이다. -> 4 + ? = 10
4에 어느 수를 더해 10이 되어야하는데, 부족한 값은 6이므로 보충되는 수로 6이 되는 것이다.
2의 보수화 과정은 이러하다.
1. 비트를 반대로 취해준다.
ex) 0 0 0 0 0 0 0 1 -> 1 1 1 1 1 1 1 0
이 두 값을 더하면 1 1 1 1 1 1 1 1 인데,
2. 이 더한 값에 1을 더해준다.
한자리씩 비트가 올라가며 자릿수가 올라간다. 맨 앞의 비트는 벗어나서 Truncate가 된다. (없는 수 취급)
결국 남는 수가 보수화를 한 값이 되는 것이다.
실행결과

'Programming > Java_자바' 카테고리의 다른 글
[JAVA 기초] 대중교통 이용 프로그램 만들기 (0) | 2021.12.08 |
---|---|
[JAVA 기초] 생성자 (0) | 2021.12.08 |
[JAVA 에센셜] 자바 코딩 연습_챕터4_실습문제 (0) | 2021.04.06 |
[JAVA 에센셜] 자바 코딩 연습_챕터3_실습문제 (0) | 2021.03.31 |
[JAVA 에센셜] 자바 코딩 연습_챕터2_실습문제 (0) | 2021.03.24 |