1. 부호 연산자 ( + , - )
부호 연산자의 산출 타입은 int 형이다!!
short s = 100;
short result = -s; // X 컴파일 에러!
int result = -s // O (-100)
public class SignOperatorExam {
public static void main(String[] args) {
int x = -100;
int result1 = +x
int result2 = -x
System.out.println("result1 = "+result1); // -100
System.out.println("result2 = "+result2); // 100
short s = 100;
//short result3 = -s; //컴파일 에러!
int result3 = -s;
System.out.println("result3 = "+result3); // -100
}
}
2. 증감 연산자 ( ++, -- )
변수의 값을 1 증가 (++) 시키거나, 1 감소 (--) 시키는 연산자
boolean 타입 제외한 모든 기본 타입의 피연산자에 사용 가능
++num; // 다른 연산 수행하기 전에 피연산자 num 값을 1 증가
--num; // 다른 연산 수행하기 전에 피연산자 num 값을 1 감소
num++; // 다른 연산 수행 후, 피연산자 num 값을 1 증가
num--; // 다른 연산 수행 후, 피연산자 num 값을 1 감소
int num1 = 1;
int num2 = 1;
int result1 = ++num1 + 10; // result1 는 12, num1이 먼저 증가되어 2가 된다.
int result2 = num2++ + 10; // result2 는 11, num2가 증가 전 1 + 10 이 result2에 대입된다.
대입 이후 num2는 2가 된다.
* 참고
++ i 와 i = i + 1 과 연산 속도는 같다!
연산자가 2 개인 i = i + 1 이 속도가 느릴 것 같지만, 바이트 코드로 변환 시 같은 코드로 변환되기 때문
3. 논리 부정 연산자 ( ! )
true 를 false 로, false 를 true 로 변경하는 연산자, boolean 타입에만 적용할 수 있다.
토글 기능 구현에 주로 사용
public class DenyLogicOperatorExam {
public static void main(String[] args) {
boolean play = true;
System.out.println(play);
play = !play;
System.out.println(play);
play = !play
System.out.println(play);
}
}
4. 비트 반전 연산자 ( ~ )
정수 타입 (byte, short, int, long) 의 피연산자에만 사용되며,
피연산자의 비트 값들을 0은 1, 1은 0으로 반전시킨다.
비트 반전 연산자의 산출 타입은 int 형이다.
따라서 피연산자는 연산 수행 전 int로 자동 타입 변환이 된 후 비트 반전이 일어난다.
byte v1 = 10;
byte v2 = ~v1; // X 컴파일 에러!! int 형으로 반환된다.
int v2 = ~v1; // O
정수의 음수 표현은 2의보수 (비트를 반전 시킨 후, +1)이므로 부호가 반대인 정수도 구할 수 있다.
byte v1 = 10;
int v2 = ~v1 + 1; // -10 저장됨
자바는 정수값을 총 32비트 이진 문자열로 반환하는 Integer.toBinaryString( ) 메소드를 제공한다.
String v1BinaryString = Integer.toBinaryString(10); // 10 의 이진 문자열
* 위의 메소드는 앞의 비트가 모두 0 이면 0 은 생략되고 나머지 문자열만 반환하기 때문에
32 비트의 모든 문자열을 얻기 위해서는 아래와 같은 메소드가 필요하다.
public static String toBinaryString(int value) {
String str = Integer.toBinaryString(value);
while(str.length() < 32) {
str = "0" + str;
}
return str;
}
public class BitReverseOperatorExam {
public static void main(String[] args) {
int v1 = 10;
int v2 = ~v1;
int v3 = ~v1 + ;
System.out.println(toBinaryString(v1) + " (십진수 : " + v1 + ")");
// 0~01010 십진수:10
System.out.println(toBinaryString(v2) + " (십진수 : " + v2 + ")");
// 1~10101 십진수:-11
System.out.println(toBinaryString(v3) + " (십진수 : " + v3 + ")");
// 1~10110 십진수:-10
System.out.println();
public static String toBinaryString(int value) {
String str = Integer.toBinaryString(value);
while(str.length() < 32) {
str = "0" + str;
}
return str;
}
}
'Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어] > 1. 변수, 기본 데이터 타입, 연산자' 카테고리의 다른 글
6. Java 자바 - 이항 연산자, 삼항 연산자 (0) | 2020.04.24 |
---|---|
4. Java 자바 - 연산자 종류, 연산자 우선순위 (0) | 2020.04.22 |
3. Java 자바 - 자동 타입 변환, 강제 타입 변환 (2) | 2020.04.21 |
2. Java 자바 - 기본 데이터 타입 (0) | 2020.04.20 |
1. Java 자바 - 변수와 리터럴 (1) | 2020.04.20 |