mommy computer
초기화(initializing) / 오버플로우(overflow) 본문
1. 변수 선언 방법
ex. 10 20 30 3개의 데이터 변수 선언하기
int num1;
int num2;
int num3;
num1=10;
num2=20;
num3=30;
이때 같은 자료형 타입은 한번에 선언할 수 있다.
int num1, num2, num3;
2. 초기화(initialize)
- 변수는 자료형이라고 선언되었기 때문에 CPU로부터 bit의 크기(개수)를 확보해놓은 상태이다.
따라서, 다룰 수 있는 수의 범위가 존재한다.
그런데, 그 영역에 값을 넣지 않은 상태에서 출력하게 되면 문제가 발생한다.
ex. int num;
syso(num); //Error. The local variable num may not have been initialized.
- 변수를 선언할 때, 확보해놓은 비트의 흔적이 남아있게 된다.
- 이것을 "잔류비트"라고 하며, CPU 메모리를 잡아먹기 때문에 아무렇게나 특정 값을 넣어놓은 후, 변수를 사용한다.
- 이렇게 특정 값을 넣는 것을 "초기화"라고 한다.
- 특정값에 기본값을 넣어주면 된다.
ex. int num = 0;
int thisYear = 2016;
int add = num + thisYear;
char = ' '; (공백문자)
String = ""; (빈문자열)
double = 0.0;
float = 0.0F;
long = 0L;
3. 범위 초과(overflow) : 자료형마다 확보할 수 있는 비트가 다르기 때문에 발생하는 현상
- 변수는 타입을 갖고 있다. 그리고 그에 따라 확보해놓은 비트가 존재한다.
ex. byte b1 = 128; 은 표현할 방법이 없어서 에러가 난다.
byte b1 = 127+1; byte가 표현할 수 있는 한계치 넘어가지만, 식의 표현자체는 문제가 없다.
ex. byte b1 = (byte)(127+1);
System.out.println(b1);
그러나, 위 식의 출력값은 128이나 error가 아닌 -128이다. WHY?
* 수의 체계
사람 : 10진수 - 한 개의 자리값에 0~9까지 총 10개의 숫자를 표현할 수 있음
컴퓨터 : 2진수(binary digit, bit) - 한 개의 자리값에 0 또는 1을 이용한 숫자를 표현할 수 있음
비트단위로 계산하고 코딩을 하는 것이 더 가볍고 빠르기 때문에 모바일에서 특히 2진수가 유용함
1byte = 0~255까지 표현할 수 있음 (2의 8승이 256)
컴퓨터는 8승 자리의 자릿값을 MSB(Most Significant Bit=Sign Bit)라고 하고, 1일경우 음수, 0일경우 양수로 지정한다.
* 진법 변환
- 양수는 그대로 2진법의 계산법을 따르면 되나, 음수의 경우 진법계산의 규칙을 따르지 않는다.
- 연산할 때 data bit 영역을 초과했다, 그래서 음수가 되는 현상을 overflow라고 한다.
- 따라서, 1byte 안에 128을 직접 넣을 경우 에러가 나고, 127+1로 연산했을 때는 비트가 초과된 값이 나타난다.
이를 오버플로우(overflow)라고 한다. 비트는 순환되며 양수와 음수를 번갈아가며 출력한다.
1000 0000(2) = -128 (원래 규칙을 따르자면 -0에 해당하지만, 음수인 0은 존재할 수 없기 때문에 -128으로 정함)
1000 0001(2) = -127
1111 1110(2) = -2
1111 1111(2) = -1
0000 0000(2) = 0
0000 0001(2) = 1
0111 1111(2) = 127
* 2의 보수법
- 음수를 표현하기 위해 '2의 보수법'을 사용한다.
(1) 오른쪽 > 왼쪽 방향으로 내려적는다.
(2) 최초의 1을 만나면 그 다음 비트부터
(3) 1은 0으로, 0은 1로 변경한다
(4) 변경한 비트값으로 십진법 치환계산을 한다.
'Programming > Java' 카테고리의 다른 글
연산자(Operator) (0) | 2016.11.15 |
---|---|
입력함수(Scanner class, JOptionPane, Parsing) (0) | 2016.10.24 |
변수(variable) / 형변환(casting) (0) | 2016.10.24 |
자료형 데이터의 이해(data type) (0) | 2016.10.17 |
자바 주석달기 / 출력문으로 기본 구조 익히기 (0) | 2016.10.15 |