2016년 6월 23일 목요일

Java Programming [4강] byte연산, short연산

안녕하세요, 오늘의 주제는 다음과 같습니다.

1. byte연산과 short연산
2. 자동형변환 / 강제형변환


1. byte연산과 short연산
byte는 8개의 bit로 이루어진 데이터를 저장하는 최소 단위를 의미합니다.
bit는 2진수를 표현하는 데이터 표현 방식으로 binary + digit의 합성어입니다.
bit가 8개 모이면 byte, 데이터를 저장할 수 있는 최소한의 형식이 됩니다.

자료형 byte는 8bit이므로 byte에 담길 수 있는 수는 -128~127까지의 수가 됩니다.
8bit중 제일 왼쪽의 비트는 부호 비트(sign bit)로, 데이터의 연산에는 영향을 받지 않습니다. 즉, 8bit중 부호 비트를 제외한 7자리가 데이터를 나타내는 데이터 비트가 됩니다.
부호 비트가 1이면 음수를, 0이면 양수를 나타냅니다.
0111 1111 : +127
0111 1110 : +126
      .
      .
      .
0000 0000 : 0     부호비트가 0, 나머지 데이터 비트가 모두 0이면 
                       양수 중 최소값인 0이 됩니다.
1111 1111 : -1    부호비트가 1, 나머지 데이터 비트가 모두 1이면
                       음수 중 최대값인 -1이 됩니다.
1111 1110 : -2
      .
      .
      .
1000 0001 : -127
1000 0000 : -128 부호비트가 1, 나머지 데이터 비트가 모두 0이면
                -128로 쓰도록 약속합니다.


지금까지의 내용을 토대로 데이터 overflow, underflow현상을 발생시켜 봅시다.














byte, short, int 등의 자료형에 들어갈 수 있는 범위를 넘어선 숫자로 초기화하거나 대입했을 때, Data overflow 혹은 Data underflow현상이 발생합니다. 이는 데이터 비트로 표현할 수 있는 숫자 범위를 넘어섰기 때문에 일어나는 문제입니다.

따라서 변수를 선언할 때는 변수에 넣어줄 값을 포함하는 자료형으로 선언해주어야 합니다.

2. 자동형변환과 강제형변환







전에도 설명했듯이 CPU는 데이터를 처리하는 단위가 int(4byte)이다. 따라서 b1+b2라는 연산의 결과는 값은 3이지만 그 값이 저장된 저장소의 크기는 4byte이다. 따라서 byte 자료형의 result변수에는 들어갈 수 없다. 이런 경우를 자동형변환이라고 한다. 이 경우, 문제를 해결하기 위해서는 다음과 같은 방법을 쓴다.






즉, 자동형변환으로 나는 문제를 강제형변환으로 해결해준다.

다음으로 살펴볼 내용도 연산 과정에서 자동형변환이 이루어져 발생되는 문제입니다.
같은 자료형 끼리의 연산 결과는 같은 자료형이 됩니다.






이 경우, 나누는 값 혹은 나누어지는 값을 정수가 아닌 실수로 선언해줍니다.






연산할 두 대상의 자료형이 다를 때는 연산의 결과는 두 자료형 중 더 큰 자료형에 저장됩니다. 따라서 정수 5와 실수 2의 5/2라는 연산의 결과는 float형으로 저장되는 겁니다.
사실, 이 과정에서 정수 5가 5.000000으로 바뀌게 되는데 이러한 형변환을 자동형변환이라고 합니다.

강제형변환은 말그대로 사용자가 강제로 변수의 크기, 즉, 자료형을 변화시키는 것을 말합니다.
(바꾸고싶은 데이터 타입)바꿀 대상
형식으로 강제형변환을 할 수 있습니다.
예를 들어
(float)5 를 하면 5->5.000000으로 바뀌게 됩니다.
혹은 (int)5.8로 강제형변환하면 5.8->5로 바뀌게 됩니다.

형변환은 사칙연산보다 우선합니다.



댓글 없음:

댓글 쓰기