Daily coding
Java Basic : day 2 - 비트 연산자 Bit Operator 본문
비트 연산자 및 기타 연산자
bit (0,1) 를 이용한 연산자
- 처리 속도가 굉장히 빠른 편
& : AND
| : OR
^ : XOR - 같을 때는 거짓, 다를 때는 참이 됨. 암호화를 시키는 데 암호키로 많이 사용함
<< : left shift
- 왼쪽으로 한칸씩 밀려감 ( 결과 = * 2 )
>> : right shift
~ : NOT
- 0->1 , 1->0
- 문제 일으키는 경우가 많아서 거의 사용안함
// AND 연산
num = 0xD3 & 0xF0;
// 8421 8421
// 1101 0011 = D3
// 1111 0000 = F0
============
// 1101 0000 = D0
System.out.println("num :" + num);
// 10진수로 나옴 : 208
System.out.printf("num : 0x%x\n", num);
// D0
//printf에서 %x 는 숫자데이터가 16진수로 출력됨
// OR 연산
num = 0xD3 | 0xF0;
// 8421 8421
// 1101 0011 = D3
// 1111 0000 = F0
============
// 1111 0011 = F3
System.out.println("num :" + num); // 10진수로 나옴
System.out.printf("num : 0x%x\n", num); // F3
// XOR 연산
num = 0xD3 ^ 0xF0;
// 8421 8421
// 1101 0011 = D3
// 1111 0000 = F0
============
// 0010 0011 = 23
System.out.println("num :" + num); // 10진수로 나옴 : 208
System.out.printf("num : 0x%x\n", num); // 23
XOR 갱신하기
: XOR로 연산된 값을 하나의 값으로 한번 더 연산을 하면 원래의 수로 돌아옴
비밀번호 입력 후 데이터베이스에는 key값으로 비밀번호를 암호화 함
num = num ^ 0xF0;
System.out.println("num :" + num); // 10진수로 나옴 : 208
System.out.printf("num : 0x%x\n", num);
// 다시 원래대로 돌아옴
// ~ 연산자(반전) : 0->1, 1->0
0x55 에서 오류가 남
(Qword로 했을 때 엉뚱한 숫자 나옴, 부호비트까지 반전을 해서 문제일으킬 가능성 큼)
8421 8421
0101 0101
1010 1010 = AA
num = ~0xF0;
//num은 int 형이고 연산은 비트로 처리되기 때문에 다른 값으로 나옴
System.out.println("num :" + num); // 208
System.out.printf("num : 0x%x\n", num);
byte by = ~0x55;
System.out.println("0x"+by);
// Shift 연산
// ROW LEVEL 이기 때문에 계산이 굉장히 빠른 편
// left shift <<
// 결과 : *2 한 값이 나옴
// 0001 : 1
// 0010 : 2
// 0100 : 4
//right shift >>
// 결과 : 나누기 2 한 값
// 0100 : 4
// 0010 : 2
// 0001 : 1
int bit;
bit = 0x1 <<1;
System.out.println("left shift << 1 : " + bit);
bit = 0x1 <<2;
System.out.println("left shift << 2 : " + bit);
bit = bit >> 1;
System.out.println("right shift >> 1 : " + bit);
bit = bit >> 1 ;
System.out.println("right shift >> 2 : " + bit);
}
}
'Language > Java_basic' 카테고리의 다른 글
Java Basic : day 2 - 스위치 제어문 (switch) (0) | 2019.11.20 |
---|---|
Java Basic : day 2 - 조건문 / 순환문 / 논리연산자 (0) | 2019.11.20 |
Java Basic : day 1 - Example 02 - swapping (0) | 2019.11.19 |
Java Basic : day 1 - Example 01 (0) | 2019.11.19 |
Java Basic : day 1 - 데이터형 별 크기 / Type cast (0) | 2019.11.19 |