본문 바로가기
JAVA

3일차// bit연산 (2진수 - > 16진수, 16진수 -> 2진수)

by aesup 2021. 1. 13.
728x90

hex = 16진수

dec = 10진수

bin = 2진수

public class MainClass {
 public static void main(String[] args) {
    //강사님께서 중요하다고하심 
    // 고급, 나중에쓰인다함
    /*----------------------
     * bit 연산: 0,1 - > 2진수
     * ---------------------
      &        and
      |        OR
      ^        XOR

      <<    LEFT SHIFT
      >>    RIGHT SHIFT
      ~    NOT

      2진수랑 16진수끼리 연산을 바꾸는걸 해야한다.


      2진수
      1101 -> 13

      1100     1010 이값을 가지고 bit연산한다
      8421     8421
       12      10
     16의1승   16의 0승
        C      A

     - 계산기로 풀수있다./////////////////////////////////

     12*16 + 10*1 ->    202    

     1110 0011
     8421 8421
      14   3
       E   3   //16진수로 표현

        0x7A //16진수로 있다 가정 이걸 2진수로 바꿔보자 7A - > 8비트
         8421 8421 - > A=10
        0111 1010


     *16 진수: 0~ A(10) B(11) C(12) D(13) E(14) F(15)
     */

     //AND
     int number;
     number = 0x71 & 0x85;
     //0111 0001
     //1000 0101
     //- > 0000 0001 결과값
     System.out.println("number = "+ number); // ---------------------------------------- 1
     System.out.printf("0x%x \n", number);  //16진수로 나오게 할 수 있다.// ---------------------- 0x1

     //OR
     number = 0xD2 | 0x3B;

     //D =13
     //1101 0010 | 0011 1011

     //1101 0010
     //0011 1011
     //-> 1111 1011 결과값
     //-> F    B
     System.out.println("number = "+ number);
     System.out.printf("0x%x \n", number);

     // XOR//////////////////////////////////////////////////////// 
     //실무에서 활용도가 제일 높다
     number = 0xAB ^ 0x74;
     /*

     0xAB                        T  T   False(0)
                                 T  F   True(1)            
     1010 1011                   F  T    True
     8421 8421                   F  F   False

     0x74

     0111 0100
     8421 8421


     ->>>>연산
     1010 1011
     0111 0100
     ->>>>연산
     1101 1111 - >  D F
                - >  0xDF 암호화 (이걸로 변하는것이 암호화)

     0111 0100            
     1101 1111
     - > 1010 1011 다시 처음을 복구

     */

     System.out.println("number = "+ number);
     System.out.printf("0x%x \n", number);

     number = 0xDF ^ 0x74;
     System.out.printf("0x%x \n", number);  // 원상복귀를 해줌



     // left shift == *2
     /*

      0001   -> 1
      0010   -> 2
      0100   -> 4
      1000   -> 8 


      */
     byte by;
     by = 0x1 << 3;  // shift 한다고 표현 shift 값 = 3
     System.out.println(by);


     // right shift == /2
     by = 0x8 >> 1;
     System.out.println(by);



     // ~ 반전
     //0 - > 1
     //1 - > 0
     by = ~0x55;

     // 0101 0101
     // 위값을 반전을 시킨다.
     // - > 1010 1010   // A  A

     System.out.printf("0x%x \n", by);



     //문제를 활용해보자////////////////////////////////////////////////////////
     number = 0xD4 ^ 0x25;

     // 1101 0100 ^ 0010 0101
     //XOR 연산을 해보자
     //- > 1111 0001
     //- > 15   1
     //- > f    1

     System.out.printf("0x%x",number);
     /////////////////////////////////////////////////////////////////////






}
}

[

OUTPUT

](http://<div class=)

1
2
3
4
5
6
7
8
9
10
11
number = 1
0x1 
number = 251
0xfb 
number = 223
0xdf 
0xab 
8
4
0xaa 
0xf1
cs

[

](http://<div class=)

728x90