초급의 끄적거림

[JAVA] bit 연산자 (비트곱, 비트합), shift연산자, 보수 본문

JAVA

[JAVA] bit 연산자 (비트곱, 비트합), shift연산자, 보수

codingD 2019. 8. 19. 15:13

[bit 연산자]

 ⊙ 컴퓨터 용량의 단위

 ⊙ 컴퓨터의 신호 체계 : 0, 1

 ⊙ 8bit (=1byte) : 0이나 1이 1bit이고 사람이 인식할 수 있는 신호로 보기 위해서는 8개가 모여서 8bit가 되어야함.

   예) 01000001 = A

        (최소) 2byte 용 언어 → 한글, 한자, 일어 등

  

 ⊙ 2^10 (2의 10승) = 1024byte → kilo byte

 ⊙ 2^20 (2의 20승) → mega byte

 ⊙ 2^30 (2의 30승) → giga byte

 ⊙ KB < MB < GB < TB < NB

 

System.out.println(16<<3);  // 16*2의3승 - 128 비교연산자 <를 2개 쓴 것, 쉬프트 연산자
System.out.println(16>>3);  // 16/2의3승 - 2

 

[shift 연산자]

 ⊙ << : left Shift   - 대상*2의 n승

 ⊙ >> : right Shift - 대상/2의 n승

 ⊙ n은 이동 bit 수

 

수의 체계 : 2진수   0  1
              8진수    0  1  2  3  4  5  6  7 
              10진수  0  1  2  3  4  5  6  7  8  9
              16진수  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F   - 10~15는 영어로 표현하기도 함

                                                                                      대소문자 구별없이 A부터
  
  문) 10진수 5를 2진수로 변환 → 101 → 8byte 채우려고 00000101 로 적으면 됨
       2진수 101 를 10진수로 101에서 1의 자리부터 2의 0승 1승 2승, n의 0승은 1에 해당
       
  문) 10진수 9를 2진수로 바꾸시오 → 00001001
       
    <빠르게 진법 계산 하는 방법>           
   128 64 32 16 8 4 2 1
2의            ~~2승 1승 0승 
                    1 0 0 1 → 9 : 9가 되려면 더해야하는 수에 1을 넣어주면 됨
                      1 0 1 → 5
                    1 1 0 1 → 13 : 더하는데 필요한 숫자에만 1을 넣어주면 됨
                 1 0 0 0 0 → 16을 2진수로 바꿨을 때        
                 
         00010000 (= 10진법의 16)
   <<3  10000 → 10000000  : 왼쪽 방향으로 3이기 때문에 왼쪽의 3칸이 없어지고 8자리를 맞추기 위해 뒤에 3칸이 붙음. 10000000 → 128
   >>3  00010 → 00000010  : 오른쪽 방향으로 3이기 때문에 오른쪽 3칸이 없어지고 8자리를 맞추기 위해 앞에 3칸이 붙음. 00000010 → 2
                 

 

[보수]

 ⊙ 보색과 비슷한 의미로서 '반대의 수'를 의미

 ⊙ ~ : 비트연산자, 1의 보수 연산자

System.out.println(~5);  //-6

 

[비트곱 / 비트합]

 ⊙ 비트곱 : & 사용

 ⊙ 비트합 : | 사용

System.out.println(5&3);  //&&가 아닌 &만 사용   → 비트곱
System.out.println(5|3);  //||가 아닌 |만 사용   → 비트합

  10진수 5 → 2진수 00000101

  10진수 3 → 2진수 00000011

          00000101              00000101
     & 00000011            | 00000011
  -------------       -------------
          00000001  =1         00000111 =7(1+1 = 1로 표현, 둘 중하나라도 비트값이 1이면 1을 반영)

Comments