본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 3강 기본자료형 - 정수관련 - byte, short, int, long

728x90
반응형

 

 

 

 

 

- 이번 강좌에서는 기본 자료형 중 정수 관련을 보도록 하겠습니다.

- 1강 변수 선언에서도 자료형 종류를 볼 때 바이트라는 개념을 적어드렸는데, 개념을 먼저 잡고 공부해 주세요.

  정수형 문자형 실수형 논리형
1바이트 byte     boolean
2바이트 short char    
4바이트 int   float  
8바이트 long   double  

- 컴퓨터는 기계인데, 기계가 정보를 이해하는 방법은 사람과 다를 수밖에 없습니다.

- 평소 사용하는 숫자나 알파벳 문자를 컴퓨터 내부에서는 어떻게 저장하고 표현하고, 이해하는지 알아보겠습니다.

 

 

 

 

 

 

 

1. 컴퓨터 데이터


 

1) 컴퓨터에서 수를 표현하는 방법

- 우리가 사용하는 모든 데이터는 컴퓨터 내부에서 0과 1로 이루어져 있습니다. 

- 컴퓨터 내부를 구성하는 반도체가 데이터를 0과 1로만 표현할 수 있기 때문입니다. 

- 집에서 사용하는 전구처럼 불이 켜지는 경우와 꺼지는 경우로 나뉜다고 보면 편합니다.

켜짐(1)
꺼짐(0)

 

- 이렇게 0 또는 1로 표현할 수 있는 최소 단위를 비트(bit)라고 하며, 8비트가 모이면 1바이트(byte)가 됩니다.

- 컴퓨터 내부에서 모든 정보를 0과 1로만 인식한다면, 실제 우리가 사용하는 숫자는 10진법이기 때문에 2진법으로 표시해 주면 됩니다.

- 물론 우리가 사용하는 언어들은 다 고급언어라 컴파일되기 때문에 2진법으로 적진 않습니다.

- 그래도 컴퓨터 언어를 배운다면 컴퓨터 언어에 대한 기본적인 개념을 알고 있으면 좋겠죠?

 

 

 

 


 

 

 

 

 

2) 10진수와 2진수

- 우리가 일상생활에서 사용하는 숫자는 0~9까지 한자리 수를 사용합니다.

- 이런 것을 10진수라고 합니다. 

- 하지만 컴퓨터는 0과 1로 처리가 되는 2진수로 되어 있습니다. 

- 1~10까지의 10진수를 2진수로 표기하면 아래와 같습니다. 

- 0 은 둘 다 0이라 표시하지 않겠습니다. 1도 마찬가지입니다.

10진수 2 3 4 5 6 7 8 9 10
2진수 10 11 100 101 110 111 1000 1001 1010

 

- 컴퓨터 내부에서는 숫자뿐만 아니라 문자도 2진수로 표현합니다. 

- 예를 들어 A라는 숫자는 65라는 10진수를 받아서 2진수로 표현하면 1000001로 표현됩니다.

- 이 65 숫자를 아스키(ASCII) 값이라고 합니다. 

- 아스키는 모든 문자를 컴퓨터가 이해할 수 있는 값으로 지정해 놓은 표준 규칙이라고 보면 됩니다.

- 8진수, 16진수도 있지만 수학시간이 아니므로 여기까지만 하겠습니다.

 

 

 


 

 

 

 

3) 비트로 표현할 수 있는 범위

- 컴퓨터는 몇 비트로 표현하느냐에 따라 수의 범위를 결정합니다.

- 컴퓨터는 2진수로 수를 표현하기 때문에 비트 수가 n개일 때 2진수로 나타낼 수 있는 숫자의 개수는 2ⁿ개입니다.

- 비트가 한 개라면 2개(2¹)의 수를 표현할 수 있으므로 범위는 0~1입니다.

- 비트가 2개라면 4개(2²)의 수를 표현할 수 있으므로 범위는 0~3개입니다.

 

  1. 1개 => 0, 1
  2. 2개 => 00, 01, 10, 11(0~3)
  3. 3개 => 000, 001, 010, 011, 100, 101, 110, 111(0~7)

 

 


 

 

 

 

 

4) 부호 있는 수를 표현하는 방법

- 컴퓨터에서 숫자를 표현할 때 양수와 음수를 어떻게 표현하는지 보겠습니다.

- 컴퓨터는 숫자를 0과 1로만 표현할 수 있기 때문에 부호 또한 0과 1로 표현합니다. 

- 부호를 나타내는 비트는 맨 앞에 붙이며 부호비트(Most Significant Bit: MSB)라 합니다.

- 부호비트가 0이면 양수, 1이면 음수로 처리가 됩니다.

- 8비트로 5라는 숫자를 표현하면 다음과 같습니다.

0 0 0 0 0 1 0 1

이부분

맨 앞의 이 부분이 부호비트입니다. 

- 보수나 이런 개념은 따로 공부해 보시길 바랍니다. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

2. 정수자료형


- 변수는 컴퓨터 내부의 메모리 공간에 저장됩니다.

- 메모리는 프로그램이 실행되는 작업 공간입니다.

- 즉, int a; 라고 선언하면, 메모리에 4바이트(int바이트) 크기의 공간이 a라는 이름으로 할당됩니다. 

- 그래서 각각의 자료 유형이 몇 바이트를 갖는지 알고 있으면 좋습니다. 

- 위에서도 표로 보여드렸는데 다시 보도록 하겠습니다. 

  정수형 문자형 실수형 논리형
1바이트 byte     boolean
2바이트 short char    
4바이트 int   float  
8바이트 long   double  

- 1바이트는 8bit죠? 그에 맞게 곱하면 됩니다.

 

- 다시 정수형만 보도록 하겠습니다.

자료형 바이트 크기 수의 범위
byte 1 -(2^7) ~ (2^7) -1 (-128~127)
short 2 -(2^15) ~ (2^15) -1 (-32,768~32,767)
int 4 -(2^31) ~ (2^31) -1 (-2,147,483,648~2,147,483,647)
long 8 -(2^63) ~ (2^63) -1 (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)

- 표현할 수 있는 유효범위입니다.

- byte로 쓰고 130을 대입하면 틀리게 처리됩니다. 

- 하지만 보통은 int를 많이 사용하므로 너무 수학적으로 생각하지 않아도 됩니다.

- 선언하고 에러 나면 다른 것으로 교체하면 되겠죠?

- byte => long순으로 커진다고 생각하면 됩니다. 

- 그럼 각각의 자료형을 하나씩 보도록 하겠습니다. 

 

 

 

 

1) byte형

- 1바이트는 8비트입니다. 

- 주로 2진 데이터를 사용할 때 사용합니다.(0과 1)

- 바이트 단위는 정보를 저장하거나 통신할 때 주로 사용합니다. 

- 예를 들어 아두이노로 불을 키는 프로그램을 짠다던지, 동영상이나 음악파일을 재생할 때 사용이 됩니다.

- byte형으로 표현할 수 있는 범위는 -128~127입니다.

- 이제 예제를 실습해 보겠습니다. 

- 패키지(ch03_number_type)과 클래스(Ex01_Byte.java)를 추가해 주세요. 

- 기초적 작업을 모르는 분은 아래 주소를 클릭하고 보고 오세요.

https://ossam5.tistory.com/613

 

[JAVA강좌] 1강 JAVA변수와 자료형

1. 프로젝트 패키지 생성 및 자바 파일 생성 - 앞으로의 강좌에서는 패키지 생성 및 자바 파일 생성하는 것을 보여드리진 않겠습니다. - 지금 잘 확인해 주시기 바랍니다. 1) 프로젝트 패키지 생성

ossam5.tistory.com

 

 

## 바이트 자료형 선언 실습1 - Ex01_Byte.java

package ch03_number_type;

public class Ex01_Byte {

	public static void main(String[] args) {
		//타입 변수명 = 값;
		
		byte num1 = 1; //범위 내에 잘 들어오므로 출력
		System.out.println(num1);

		//byte num2 = 128; //byte는 -128~127까지만 처리되므로 에러
	}

}

 

- num1은 byte 자료형의 유효한 숫자 범위이기 때문에 잘 도출이 됩니다.

- num2는 byte 범위가 -128~127까지인데 범위에 넘어가는 숫자를 대입했기 때문에 에러가 발생됩니다.

- 프로젝트에 에러가 발생되면 보기가 안 좋기 때문에 앞에 //로 한 줄 주석 처리했습니다. 

- 테스트해 볼 때는 //를 빼보면 에러 표시가 보일 겁니다. 

해당 라인에 에러가 있는 것을 확인할 수 있습니다.

 

 

 

 

 


 

 

 

 

 

2) short형

- 2바이트로 정수를 표현하는 자료형입니다.

- 보통 C언어와의 호환을 위해 추가를 합니다.

- 범위는 -32,768~32,767 사이로 처리해야 합니다. 

 

## short 자료형 선언 실습1 - Ex02_Short.java

package ch03_number_type;

public class Ex02_Short {

	public static void main(String[] args) {
		short num1 = 1; //범위 내에 잘 들어오므로 출력
		System.out.println(num1);

		//short num2 = 40000; //short은 -32,768~32,767까지만 처리되므로 에러
	}

}

- num1은 short 자료형의 유효한 숫자 범위이기 때문에 잘 도출이 됩니다.

- num2는 short 범위가 -32,768~32,767 까지인데 범위에 넘어가는 숫자를 대입했기 때문에 에러가 발생됩니다.

- 프로젝트에 에러가 발생되면 보기가 안 좋기 때문에 앞에 //로 한 줄 주석 처리했습니다. 

- 테스트해 볼 때는 //를 빼보면 에러 표시가 보일 겁니다. 

 

 

 


 

 

 

 

 

 

3) int형

- int는 4바이트입니다.

- 정수를 표현할 때 가장 많이 사용하는 자료형입니다.

- 범위는 -2,147,483,648~2,147,483,647라서 꽤 큰 범위를 사용할 수 있습니다.

 

## int자료형 선언 실습1 - Ex03_Int01.java

package ch03_number_type;

public class Ex03_Int01 {

	public static void main(String[] args) {
		int num1 = 1; //범위 내에 잘 들어오므로 출력
		System.out.println(num1);

		//int num2 = 3000000000; //int는 -2,147,483,648~2,147,483,647까지만 처리되므로 에러
	}

}

- num1은 int 자료형의 유효한 숫자 범위이기 때문에 잘 도출이 됩니다.

- num2는 int 범위가 -2,147,483,648~2,147,483,647 까지인데 범위에 넘어가는 숫자를 대입했기 때문에 에러가 발생됩니다.

- 프로젝트에 에러가 발생되면 보기가 안 좋기 때문에 앞에 //로 한 줄 주석 처리했습니다. 

- 테스트해 볼 때는 //를 빼보면 에러 표시가 보일 겁니다. 

 

 

 

 

## int자료형 선언 실습2 - Ex04_Int02.java

- 2진수,  8진수, 16진수를 써도 적용이 됩니다.

- 대신 출력할 때는 알아서 10진수로 변경이 됩니다. 

package ch03_number_type;

public class Ex04_Int02 {

	public static void main(String[] args) {
		int num1 = 010; //8진수 10 => 10진수 8
		System.out.println(num1);
		int num2 = 0x10; //16진수 10 => 10진수 16
		System.out.println(num2);
		int num3 = 0b10; //2진수 10 => 10진수 2
		System.out.println(num3);
	}

}

- 주석으로 설명을 첨부했습니다. 

 

 

## int자료형 선언 결과2 - Ex04_Int02.java

- 결과는 10진수로 도출되는 것이 확인됩니다. 

 

 

 

 


 

 

 

 

 

4) long형

- 자바에서 정수를 표현하는 가장 큰 단위로 8바이트입니다.

- 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 사이로 처리해야 합니다. 

- 숫자를 그냥 쓰면 int를 기본값으로 처리해서 에러가 발생합니다.

- 그래서 숫자 뒤에 대문자 [L]이나, 소문자 [ l ]을 붙여 줍니다.

- 소문자 엘은 숫자 1과 헷갈리므로 보통 L을 작성하는 것이 좋습니다.

 

 

## long 자료형 선언 코드1 - Ex05_Long01.java

package ch03_number_type;

public class Ex05_Long01 {

	public static void main(String[] args) {
		long num1 = 123456789123L;
		
		System.out.println(num1);
		
		//long num2 = 123456789123; //L을 작성하지 않으면 에러
	}

}

- num1은 숫자 뒤에 L을 붙였기 때문에 에러가 없습니다.

- num2는 숫자 뒤에 L을 붙이지 않았기 때문에 에러입니다.

- 프로젝트에 에러가 발생되면 보기가 안 좋기 때문에 앞에 //로 한 줄 주석 처리했습니다. 

- 테스트해 볼 때는 //를 빼보면 에러 표시가 보일 겁니다. 

 

 

## long 자료형 선언 결과1 - Ex05_Long01.java

- 결과는 L없이 숫자로만 반환하는 것을 확인할 수 있습니다.

 

 

** 숫자 자료형 중 정수형은 모두 확인을 했습니다.

** 다음 강좌를 실수형을 확인해 보도록 하겠습니다. 

 

 

728x90
반응형