[Java] 1_2_변수와 자료형(1)

Haeun Noh·2022년 7월 26일
0

0726


오늘도 어김없이 과제가 있습니다.
변수와 자료형이길래 당연히 변수와 자료형만 다루겠다는 제 1차원적인 생각은 강의를 들으며 완전히 무너졌습니다.
오늘의 주된 내용은 진법변환이라고 생각되는데요, 제가 처음 JAVA를 배울 때도 한 번에 이해하기 어려웠던 부분이기에 이 부분에 좀 더 집중하며 들었습니다.
그럼 바로 정리를 시작해볼까요!



컴퓨터에서 데이터 표현하기

컴퓨터는 01로만 데이터를 저장하는데 이것을 bit라는 단위로 나타냅니다. 여기서 01onoff를 나타냅니다.

  • bit(비트) : 컴퓨터가 표현하는 데이터의 최소 단위로 2진수 하나의 값을 저장할 수 있는 메모리의 크기
  • byte(바이트) : 1byte == 8bit


0과 1의 표현 - 2진수

컴퓨터는 0과 1로 자료를 표현합니다. 따라서 숫자나 문자도 0과 1의 조합으로 표현됩니다.

10진수2진수
00000 0000
10000 0001
20000 0010
30000 0011
40000 0100
50000 0101
60000 0110
70000 0111
80000 1000
90000 1001
100000 1010
  • 이 때 10으로 읽지 않고 일영이라고 읽는다.


8진수와 16진수

2진수말고도 8진수와 16진수를 사용하기도 합니다. 왜 굳이 8진수와 16진수가 필요한 것일까요? 왜냐하면 2진수로 표현하면 길이가 너무 길어지기 때문에 상대적으로 적게 bit를 사용하는 8진수나 16진수를 사용하는 것입니다.

  • 주로 주소를 나타낼 때 사용
  • 2진수를 사용하면 4bit를 사용해야 하지만 16진수를 사용하면 1bit만 사용하게 되는 경우가 있다.
10진수16진수
99
10A
11B
12C
13D
14E
15F
1610
10진수8진수
77
810
911

숫자 10을 10진수, 8진수, 16진수로 출력해보자

  • 0B : 2진수를 나타낼 때 사용
  • 0 : 8진수를 나타낼 때 사용
  • 0X : 16진수를 나타낼 때 사용
    / 여기서 0은 숫자이다.
    /
    Ctrl+F11을 하면 eclipse에서 컴파일이 됨
package binary;

public class BinaryTest {

	public static void main(String[] args) {

		int num = 10;
		int bNum = 0B1010;	//2진수 10
		int oNum = 012;		//8진수 10
		int hNum = 0XA;		//16진수 10
		
		System.out.println(num);
		System.out.println(bNum);
		System.out.println(oNum);
		System.out.println(hNum);
	}

}
실행결과 :

10
10
10
10


음의 정수는 어떻게 표현할까?

정수의 가장 왼쪽에 존재하는 비트는 부호비트라고 함과 동시에 MSB라고도 합니다.

  • MSB (Most Significant Bit) : 가장 중요한 비트라는 뜻 (부호비트)

음수를 만드는 방법은 2의 보수를 취하는 것입니다.
일반적으로 양수는 우리가 숫자를 표현할 때 8bit를 씁니다.
앞 부분, 즉 MSB가 0인 경우를 우리는 양수라고 합니다.
반대로 앞 부분이 1인 경우는 음수라고 합니다.

  • 0000 0101 > 5
    5의 음수, 즉 -5를 구하려면 2의 보수를 만들어야 합니다.

2의 보수를 구하는 방법

  1. 1의 보수를 구합니다. (비트를 거꾸로 만듦)
    0000 0101 -> 1111 1010
  2. 1을 더합니다.
    1111 1011

결과 : 0000 0101 + 1111 1011 = 0000 0000



양수와 음수 더하기

이제 실제로 eclipse에서 양수와 음수를 더해보겠습니다.

package binary;

public class BinaryTest2 {

	public static void main(String[] args) {
		int num1 = 0B00000000000000000000000000000101;	//5
		int num2 = 0B11111111111111111111111111111011;	//-5

		int sum = num1 + num2;
		System.out.println(num1);
		System.out.println(num2);
		System.out.println(sum);
	}

}
실행결과 : 

5
-5
0


이 블로그에 작성된 정보를 더 자세히 알고 싶다면?
Do it! 자바 프로그래밍 입문_자바 프로그래밍 시작하기 강의를클릭하세요!


profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글