복합 대입 연산자( +=, -=, *=, /=, %= 등 )
- short, byte형의 명시적 형 변환이 필요없다.
short num = 30
num += 30L
처리과정
1) num = num + 30L
2) num = (short) (num + 30L)
※ 복합 대입 연산자를 사용하면 형 변환을 자동으로 해준다.
논리 연산자 ( &&, ||, ! )
Short-Circuit Evaluation(Lazy Evaluation) (SCE)
- 연산의 효율 및 속도를 높이기 위해서 불필요한 연산을 생략하는 행위.
예) "&&"의 왼쪽 피연산자가 false이면, 오른쪽 피연산자는 확인하지 않는다.
"||"의 왼쪽 피연산자가 true이면, 오른쪽 피연산자는 확인하지 않는다.
단항 연산자 ( +, -, ++, -- )
- 단항 연산자 사용 시에도 연산을 int형으로 진행한다. 따라서 형 변환이 필요하다.
short num = 30
//short num2 = +num (에러)
short num2 = (short)(+num)
//short num3 = -num (에러)
short num3 = (short)(-num)
- "++", "--" 연산자는 증가 및 감소된 값을 반환하는 것만 아니라 실제 메모리에 들어있는 값도 변경시킨다.
- "++", "--" 연산자는 앞에서 사용 시, 선반영, 뒤에서 사용 시 후반영 시킨다.
int num = 30
++num
num++
System.out.println(num) // 32
System.out.println(--num) // 31, 값 감소 후 출력
System.out.println(num) // 31
System.out.println(num++) // 31, 값 출력 후 증가
System.out.println(num) // 32
비트 연산자 ( &, |, ^, ~ )
- 연산자 종류
"&" 비트 AND 연산
"|" 비트 OR 연산
"^" 비트 XOR 연산(두 비트 값이 서로 다른 경우에만 1, 나머지 경우에는 0)
"~" 비트 NOT 연산
- 비트 연산자 사용 시에도 연산을 int형으로 진행한다. 따라서 형 변환이 필요하다.
byte a = 16
byte b = 9
// byte c = a & b (에러)
byte c = (byte)(a & b)
// 0 0 0 1 0 0 0 0
// 0 0 0 0 1 0 0 1
System.out.println(c) // 0
비트 쉬프트 연산자 ( <<, >>, >>> )
- 연산자 종류
"<<" 비트 열을 왼쪽으로 이동시킨다. ( 이동에 따른 빈 공간은 0 으로 채운다 )
">>" 비트 열을 오른쪽으로 이동시킨다. ( 이동에 따른 빈 공간은 음수 1, 양수 0 으로 채운다 )
">>>" 비트 열을 오른쪽으로 이동시킨다. ( 이동에 따른 빈 공간은 0 으로 채운다 )
byte a = 16 // 00010000
System.out.println((byte)(a << 1)) // a의 값을 왼쪽으로 1칸 이동 ( 00100000 )
System.out.println((byte)(a << 2)) // a의 값을 왼쪽으로 2칸 이동 ( 01000000 )
byte b = 4 // 00000100
System.out.println((byte)(b >> 1)) // b의 값을 오른쪽으로 1칸 이동 ( 00000010 )
System.out.println((byte)(b >> 2)) // b의 값을 오른쪽으로 2칸 이동 ( 00000001 )
byte c = -4 // 11111100
System.out.println((byte)(c >> 1)) // c의 값을 오른쪽으로 1칸 이동 ( 11111110 )
System.out.println((byte)(c >> 2)) // c의 값을 오른쪽으로 2칸 이동 ( 11111111 )
10진수를 2진수로 변환
public class bitoper {
private static void Print(int count, int[] bitArray ) {
for(int i = count; i >= 0 ; i--)
System.out.print(bitArray[i]);
}
private static void getBinary(int a, int count, int[] bitArray ) {
for(count= 0; a != 1; count++ ) {
bitArray[count] = a%2;
a = a/2;
}
bitArray[count] = a;
Print(count, bitArray);
}
static void decimalToBinary(int a, int count, int[] bitrep) {
getBinary(a, count, bitrep);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int count = 0;
int[] bitrep = new int[32];
decimalToBinary(a, count, bitrep);
}
}
[참고자료]
윤성우의 열혈 Java 프로그래밍
'Java > 기본' 카테고리의 다른 글
자바(Java) 클래스 변수, 클래스 메소드 (0) | 2020.02.24 |
---|---|
자바(Java) 정보은닉, 캡슐화 (0) | 2020.02.23 |
자바(Java) 흐름 제어 (0) | 2020.02.23 |
자바(Java) final 예약어, 상수, 형 변환 (0) | 2020.02.22 |
자바(Java) 기본자료형 (0) | 2020.02.22 |