티스토리 뷰
비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자로 1 또는 0을 사용합니다.
즉 변수에 값을 넣으면 메모리에 저장될 때는 0 또는 1의 2진수 값으로 저장을 하는데 이 값을 이용해서 연산을 합니다.
& | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산, 1의 보수) |
비트 연산자를 사용하기 위해서는 먼저 진법 변환에 대해서 알아야 합니다. 자바에서는 진법 변환을 위해서 Integer Objecr에 진법 변환에 대한 API를 다음과 같이 제공합니다.
10진수 -> 다른 진법 변환
10 진수 to 2진수 : Integer.toBinaryString(정수 리터럴),
10 진수 to 8진수 : Integer.toOctalString(정수 리터럴),
10 진수 to 16진수 :Integer.toHexString(정수 리터럴)
다른 진수 -> 10진수로 변환
2 진수 to 10진수 : Integer.parseInt(2 진수 값, 2);
8 진수 to 10진수 : Integer.parseInt(8 진수 값, 8);
16 진수 to 10진수 : Integer.parseInt(16 진수 값, 16);
public class BitOperator {
public static void main(String[] args) {
int numA = 3;
int numB = 2;
int numC = numA & numB;
System.out.println(String.format("%s & %s = %s", numA, numB, numC)); // 1)
System.out.println(String.format("%s & %s = %s",
Integer.toBinaryString(numA),
Integer.toBinaryString(numB),
Integer.toBinaryString(numC))); // 2)
}
}
1) 변수 numA, numB, numC를 출력하는 문장으로 numC = numA & numB를 AND 연산하여 저장한 값이다,
- 3 & 2 = 2
2) 1)의 결과가 어떻게 나오는지 확인하기 위해서 변수 numA, numB, numC를 2진수로 표시하기 위해 Integer.toBinaryString API를 사용해서 각각 출력한 것입니다.
-> 11 & 10 = 10
-> 3 & 2는 2진수로 11 & 10이면 AND 연산을 하면 10으로 십진수로 변환하면 2입니다.
public class BitOperator {
public static void main(String[] args) {
int numA = 3;
int numB = 2;
System.out.println(String.format("%s | %s = %s",
Integer.toBinaryString(numA),
Integer.toBinaryString(numB),
numA | numB)); // 1)
System.out.println(String.format("십진수 : %s\n 이진수 : %s\n 8진수 : %s\n 16진수 : %s",
10,
Integer.toBinaryString(10),
Integer.toOctalString(10),
Integer.toHexString(10))); // 2)
System.out.println( String.format("십진수 : %s\n 십진수 : %s\n 십진수 : %s\n 십진수 : %s",
100,
Integer.parseInt("1010",2),
Integer.parseInt("12",8),
Integer.parseInt("a",16)) ); // 3)
System.out.println(String.format("~%s = %s",
Integer.toBinaryString(numA),
~numA )); // 4)
}
}
1) numA | numB를 OR 연산을 한 것으로 결과 : 11 | 10 = 3
2) 십진수 2를 이진수, 8진수, 16진수로 변환한 것으로 각각 Integer.toBinaryString(10), Integer.toOctalString(10), Integer.toHexString(10)을 사용합니다.
3) 이진수, 8진수, 16진수를 10진수로 변환하기 위해 Integer.parseInt를 사용하는데 두 번째 인자가 진법입니다.
-> Integer.parseInt("문자",진법) => Integer.parseInt("1010",2) : 1010 이진수를 10진수로 변환
4) Bit 부정 연산을 입니다. : ~11 = -4
-> 처리 과정 :
-> 십집수 3
-> 이진수 11의 메모리 값은 int(4Byte) 값 : 00000000 00000000 00000000 0000 0011
-> ~ 부정 연산 처리 후 메모리 값 : 11111111 11111111 11111111 11111100
-> 십진수로 -4
'Java > 기본' 카테고리의 다른 글
023. 자바 : 비교연산자 (0) | 2022.03.06 |
---|---|
022. 자바 : 시프트연산자 (0) | 2022.03.06 |
020. 자바 : 증감연산자 (0) | 2022.03.06 |
019. 자바 : 산술연산자 (0) | 2022.03.06 |
018. 자바 : 대입 연산자 (0) | 2022.03.06 |