이항 연산자의 한 종류
이항 연산자는 피연산자의 크기가 4byte이하면 4byte(int)로 변환 후에 연산 수행
이항 연산자는 피연산자들의 타입을 서로 일치시켜야 함
사칙 연산자 - +, -, *, /
int보다 작은 자료형은 int로 형변환 후에 연산 수행
자료형이 다르면 표현범위가 더 큰 쪽에 맞춰 형변환 후에 연산 수행
정수형 간의 나눗셈에서 0으로 나누는 것은 금지
실수형은 부동소수점 값인 0.0f, 0.0d로 나누는 것이 가능하나 결과는 NaN(숫자 아님)으로 뜸
|
사칙 연산자의 연산결과를 대입할 경우 int보다 작은 자료형에 대입할 시 에러가 발생 - 형변환 해줘야 함
변수의 자료형에 따라 발생하는 오버플로때문에 원래의 결과값과는 다를 수 있음
연산결과를 넣는 변수의 자료형과는 별개로 피연산자들의 결과값이 오버플로될 경우 오버플로된 값이 변수에 들어감
변수의 자료형이 long일지라도 두 개의 피연산자가 int면 결과값은 int기 때문에 오버플로가 발생하여 이상한 값이 변수에 들어갈 수도 있음
하나의 피연산자가 long이라면 결과값도 long이 되므로 오버플로 X
오버플로 시 연산순서에 따라서도 값이 달라짐
상수 or 리터럴 간의 연산은 실행과정동안 변하는 값이 아니기 때문에 형변환이 없어도 실행 가능
char c2 = ‘a’ + 1; //문제 없음
char c2 = c1 + 1; //문제 있음
대문자와 소문자의 코드 차이는 32
‘a’ - ‘A’ = 32
숫자 0과 문자 0의 값은 차이가 있음
Math.round() : 매개변수로 받은 값을 소수점 첫째 자리에서 반올림하여 정수로 돌려줌
나머지 연산자 - %
나누고 난 나머지 값을 돌려줌
boolean을 제외한 기본형 변수에 사용 가능
정수형인 연산에는 오른쪽에 0을 사용할 수 없고, 0.0d, 0.0f로 나누는 것은 허용
결과값의 부호는 왼쪽에 있는 피연산자의 부호를 따름 - 부호를 무시한 나머지 연산 후, 결과에 부호를 붙임
쉬프트 연산자 - <<, >>, >>>
피연산자의 각 자리를 오른쪽 or 왼쪽으로 이동(2진수로 표현했을 때)
정수형 변수에만 사용 가능
x << n : x * 2^n과 같음
x >> n : x / 2^n과 같음
n의 크기가 자료형의 bit보다 크면 n % bit 만큼만 이동시킴
<< : 자리를 왼쪽으로 이동시키며 빈칸을 0으로 채움
>> : 자리를 오른쪽으로 이동시키는데 양수와 음수일 때 차이가 있음
양수 : 빈칸을 0으로 채움
음수 : 부호를 위해 빈칸을 1로 채움
>>> : 자리를 오른쪽으로 이동시키며 양수, 음수 관계없이 빈칸을 0으로 채움
쉬프트 연산자가 사칙 연산자(*, /)보다 속도가 빠름
Integer.toBinaryString() : 매개변수를 2진수로 표현한 문자열 반환, 맨 앞의 0부분을 생략함
-8 >>> 1 = 1111111111111111111111111111100
'JAVA' 카테고리의 다른 글
[Java의 정석] 3.5. 논리 연산자 (0) | 2016.03.01 |
---|---|
[Java의 정석] 3.4. 비교 연산자 (0) | 2016.03.01 |
[Java의 정석] 3.2. 단항 연산자 (0) | 2016.03.01 |
[Java의 정석] 3.1. 연산자 (operator) (0) | 2016.03.01 |
[Java의 정석] 2.2. 변수의 타입 (0) | 2016.03.01 |