Daily coding

Java Basic : day 2 - 비트 연산자 Bit Operator 본문

Language/Java_basic

Java Basic : day 2 - 비트 연산자 Bit Operator

sunnnkim 2019. 11. 20. 18:16

비트 연산자 및 기타 연산자


  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);
 
 
 
}
}