[Java] - 변수와 자료형 01
* 컴퓨터에서 데이터 표현
- 컴퓨터는 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비트)의 메모리 공간을 사용한다.
* 변수 선언시 유의점
- 변수의 이름은 알파벳, 숫자, _, $로 구성
- 대소문자를 구분함
- 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용 할 수 없음
- 이름 사이에 공백이 있을 수 없음
- 변수의 이름을 정할 때는 변수의 역할에 어울리는, 의미 있는 이름을 지어야 함