Lumpy Space Princess - Adventure Time
공부/Java

#02. 진수/변수/상수 이해하기

yaebb_82 2022. 1. 7.

반응형

저번에 Java 환경 세팅을 마쳤기 때문에 이번 시간부터 본격적으로 시작이라고 할 수 있다. 아직 갈 길이 멀지만 꾸준히 공부하고 꼭 끝까지 마치도록 해보겠다. 화이텡!! 👊🔥


 

1. 데이터 표현하기

컴퓨터는 0과 1로 구성되어있고, 0과 1로만 데이터를 저장한다. (bit, byte... 등의 단위를 사용한다.)

+ 1byte = 8bit

 

기본적으로 컴퓨터는 2진수를 사용한다. 2진수 외에도 8진수 / 10진수 / 16진수 등이 사용된다.

+ 10진수 : 9 10 11 12 13 14 15 16

+ 16진수 : 9  A  B  C  D  E  F 10

 

 

package binary;

public class BinaryTest{

	public static void main(String[] args){
    
    	int num = 10;
    	int bNum = 0B1010; //2진수
    	int cNum = 012; //8진수
    	int dNum = 0XA; //16진수
    
    	System.out.println(num);
    	System.out.println(bNum);
    	System.out.println(cNum);
    	System.out.println(dNum);
    
    }

}

 

  • 10진수 : Int num = 10;
  • 2진수 : Int bNum = 0B1010;  //2진수를 나타내기 위해서 0B를 앞에 써줘야 한다.
  • 8진수 : Int cNum = 012;  // 8진수를 나타내기 위해서 0을 앞에 써줘야 한다.
  • 16진수 : Int dNum = 0XA;  // 16진수를 나타내기 위해서 0X를 앞에 써줘야 한다.

 

 

Q. 음의 정수를 어떻게 표현할까?   A. 2의 보수를 취해준다.

cf.) 맨 앞이 1이면 음수 / 0이면 양수 (= 부호 비트 : MSB)

 

ex) 5를 음의 정수로 표현하기 (-5)

   1. 5를 2진수로 표현하기 : 00000101

   2. 1의 보수 취하기 : 11111010 (0과 1을 서로 반대로 바꾸기)

   3. 1을 더한다 : 11111010 + 00000001 = 11111011

 

 

 

2. 변수의 선언과 초기화

*변수 란? 

프로그래밍에서 값을 사용하기 위해 선언하는 것을 변수라고 한다. 다른 말로는, 프로그램에서 사용되는 자료를 저장하기 위한 공간 / 할당받은 메모리 주소 대신 부르는 이름 이라 할 수 있다.

 

*변수의 특징

  1. 변수의 이름은 알파벳, 숫자, _, $로 구성된다.
  2. 변수의 이름은 숫자로 시작X, 키워드X, 사이에 공백X
  3. 변수의 역할에 어울리는 이름을 지어야 한다.

 

 

package binary;

public class VariableEx {

	public static void main(String[] args) {
		
		int num; //선언
		num = 10; // 초기화
		
		System.out.println(num);
		
		int level = 20; //선언과 동시에 초기화
		System.out.println(level);
	}

}

변수는 사용되기 전에 선언되어야 하며, 초기화를 시켜줘야 한다. 단순히 변수만 입력하는 것은 선언이고, 선언한 변수에 = 기호를 사용하여 어떤 값을 할당하는 것을 초기화라고 한다. 위와 같이 선언과 동시에 초기화도 가능하다.

 

 

 

3. 자료형

  • 정수형 : byte(1) / short(2) / int(4) / long(8)
  • 문자형 : char(2)
  • 실수형 : float(4) / double(8)
  • 논리형 : boolean(1)

 

 

package binary;

public class VariableEx2 {

	public static void main(String[] args) {
		
		int num = 10;
		long num2 = 123456789000L; //저장을 8바이트로 해라. L이나 l 필요
		
		System.out.println(num);
		System.out.println(num2);
		
		char ch = 'A';
		System.out.println(ch);
		System.out.println((int)ch);
		
		ch = 66;
		System.out.println(ch);
		
		double dNum = 3.14;
		float fNum = 3.14F; //기본적으로 double로 저장되기 때문에 F나 f 필요
		
		System.out.println(dNum);
		System.out.println(fNum);
		
	}

}

*문자 → 숫자 : 인코딩 / 숫자 → 문자 : 디코딩

 

*문자 세트

- 아스키 : 1byte로 표현

- 유니코드 : 멀티 바이트로 표현 / 한글과 같은 복잡한 언어는 표준 인코딩 / UTF-8, UTF-16이 대표적 (자바에서는 UTF-16 사용)

 

 

 

4. 상수

*상수 란?

변하지 않는 값을 말한다. (반대 개념 : 변수 = 변하는 값)

선언할 때에는 'final' 키워드를 사용한다.

 

*리터럴 이란?

프로그램에서 사용하는 모든 숫자, 값, 논리 값을 의미한다. ex) 10, 3.14, 'A', true ...

리터럴은 특정 메모리 공간인 상수 풀에 존재하는데, 필요한 경우 상수 풀에서 가져와서 사용한다. 상수 풀에 저장할 때 기본적으로 정수는 int, 실수는 double로 저장된다.

 

package binary;

public class Constant {

	public static void main(String[] args) {
		
		final int MAX_NUM = 100; //대부분 상수는 대문자로만 표현해준다.
		final double PI = 3.14;
		
		System.out.println(MAX_NUM);
		System.out.println(PI);
		
		//PI = 3.15; //final로 선언했기 때문에 3.1로 변경되지 않는다.
		
		final int STUDENT_NUM = 30; //한꺼번에 수정 가능하다.
		int num = 0;
		
		if(num == STUDENT_NUM) {}
		System.out.println(STUDENT_NUM);

	}

}

final을 사용했기 때문에 상수라는 것을 알 수 있고, 중간에 다른 값으로 바꾼다고 해도 final로 선언했기 때문에 변경되지 않는다.

 

 

 

*형 변환 이란?

서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어난다.

- 묵시적 형 변환 : 작은 수 → 큰수

- 명시적 형 변환 : 큰 수 → 작은 수

 

package binary;

public class ExplicitConversion {

	public static void main(String[] args) {
		int iNum = 1000;
		byte bNum = (byte)iNum;
		
		System.out.println(iNum);
		System.out.println(bNum); //잘라서 넣다보니 앞이 1이되어 음수가 나오게 된 것.
		
		double dNum = 3.14;
		iNum = (int)dNum;
		System.out.println(iNum); //소수점 밑으로 유실, 정수부분만 나오게 된다.
		
		float fNum = 0.9F;
		int num1 = (int)dNum + (int)fNum;
		int num2 = (int)(dNum + fNum);
		
		System.out.println(num1);
		System.out.println(num2);

	}

}

long이나 float 값으로 저장해야 하는 경우에는 식별자 : L or l / F or f 를 명시해줘야 한다.

명시적 형 변환을 할 때에는 (int) num, (float) num 이런 식으로 변수 앞에 써줘야 한다.

 

반응형

'공부 > Java' 카테고리의 다른 글

#06. 클래스 / 객체 / 패키지 / 메서드  (0) 2022.01.27
#05. 반복문  (0) 2022.01.25
#04. 조건문  (0) 2022.01.25
#03. 항과 연산자  (0) 2022.01.24
#01. Java 시작하기  (0) 2022.01.07

댓글