개발 공부/Java

[Java] - 변수와 자료형 01

징_ 2023. 10. 26. 18:31

 

* 컴퓨터에서 데이터 표현

- 컴퓨터는 0과 1로만 데이터를 저장 함

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

* 비트로 표현한 수

- 10진수 : 0부터 10까지의 수 
- 2진수 : 0과 1
- 8진수 : 2진수 3비트
- 16진수 : 2진수 4비트
- n진수 => n일 때 단위가 올라감

10진수 0 1 2 3 4 5 6 7 8 9 10
2진수 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
8진수 0 1 2 3 4 5 6 7 10 11 12
16진수 0 1 2 3 4 5 6 7 8 9 A
10진수 11 12 13 14 15 16
2진수 1011 1100 1101 1110 1111 10000
8진수 13 14 15 16 17 20
16진수 B C D E F 10

 


✔️10진수 -> 2진수 변환 방법

  2 2 2 2 2 ³ 2 ² 2 ¹ 2
x 2진수 0 0 0 0 0 1 0 1
= 0 0 0 0 0 4 0 1

- (비트마다 정해진 2^n) x (2진수의 값) 에서 나온 수의 총 합으로 값을 도출
즉, 00000101은 4 + 1 = 5 이다.
 


✔️ 8진수 - 10진수의 관계

10진수 8 = 8진수 10 
10진수 9 = 8진수 11 (8진수의 10 +1 = 11)
10진수 10 = 8진수 12 (8진수의 10 + 2 = 12)
10진수 16   = 8진수 20 (8진수의 10 + 10 =20)
 


✔️ 16진수 

- 0~9까지는 10진수와 동일

- 두 자리수인 10 ~ 15까지는 한 문자로 표현하기 위해 알파벳 사용 A~F- 16일 때 단위가 올라감 => 10
 


✔️ 리터럴 표현

- 10진수 : 숫자 앞에 아무것도 없음
- 2진수 : 숫자 앞에 0B
- 8진수 : 숫자 앞에 0
- 16진수 : 숫자 앞에 0X

package chapter2;

public class BinaryTest {

	public static void main(String [] args) {
    
    	 int num = 10;		// 10진수
        int bNum = 0B1010;	// 2진수 - 0B
        int oNum = 012;		// 8진수 - 0
        int hNum = 0XA;		// 16진수 - 0X

        System.out.println(num);	// 10
        System.out.println(bNum);	// 10
        System.out.println(oNum);	// 10
        System.out.println(hNum);	// 10
    }
    
}

 

 
✔️ 양수와 음수 표현

- 부호 비트(Most Significant Bit; MSB - 가장 중요한 비트라는 뜻)
 : 부호를 나타내는 비트로 정수의 가장 왼쪽에 존재하는 비트
   양수 = 부호 비트 0 / 음수 = 부호 비트 1  (BUT 부호 비트만 바꾼다고 양수-음수 변환이 바로 되는 것은 아님)
- 양수를 음수로 만드는 방법
  : 2의 보수를 취한다
    - 2의 보수란? 음수를 말한다. 

  •  '-5' 만들기
    1) 1의 보수를 취한다. 
    => 10진수 5를 2진수 8비트로 나타내면 00000101
          2진수에 대한 1의보수 : 11111010 (0과1을 그대로 반전시킨 값)
          이 둘을 더하면 11111111
    2) 제일 낮은 자리에 1을 더한다.
    : 11111111 + 00000001 = 100000000(9자리) 
    =>8비트이기 때문에 맨 앞의 1은 버려진다(트렁케이트, truncate)
    따라서 2의보수(음수) = 1의 보수 + 1 / 즉, -5는 11111011

 

  • 양수와 음수 더하기
package chapter2;

public class BinaryTest2 {
	public static void main(Stringp] args) {
    	 int num1 = 0B000000000000000000000101;	// 이진수 5
        int num2 = 0B111111111111111111111011;	// 이진수 -5 (1의 보수)
        
        int sum = num1 + num2;	// 0
        
        System.out.println(num1);	// 5
        System.out.println(num2);	// -5
        System.out.println(sum);	// 0
    }
}


* 변수(Variable)

: 프로그래밍에서 값(Data)를 사용 하기 위해 선언하는 것
- 프로그램에서 사용되는 자료를 저장하기 위한 공간으로 할당 받은 메모리의 주소 대신 부르는 이름을 말한다. 프로그램 실행 중에 값 변경이 가능하며 사용되기 이전에 선언 되어야 한다. 
 
 

* 변수의 선언과 초기화

1) 변수 선언과 동시에 값을 초기화
int level ;     -> level 이라는 이름의 변수 선언 (메모리에 4바이트크기의 공간에 level이라는 이름으로 할당해줘)
int level = 0;     -> level 변수 선언과 동시에 0 으로 초기화

                          (메모리에 4바이트 크기의 공간에 level이라는 이름을 할당하고  그 공간에 값 0을 넣어줘)
2) 변수를 선언 후 값을 대입
int level;   -> level 변수 선언
level = 10;   -> level 변수에 10이라는 값을 대입
✔️ int의 역할 : level 변수의 데이터 타입을 정의
      int의 의미 : level은 정수이며 4바이트(32비트)의 메모리 공간을 사용한다.
 
 

* 변수 선언시 유의점

- 변수의 이름은 알파벳, 숫자, _, $로 구성
- 대소문자를 구분함
- 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용 할 수 없음
- 이름 사이에 공백이 있을 수 없음
- 변수의 이름을 정할 때는 변수의 역할에 어울리는, 의미 있는 이름을 지어야 함