Java

연산자(Operator) 1. 산술 연산자

에어팟맥스 2022. 6. 6. 16:15

#### 1. 산술연산자 ####
 + - * / %(나머지)  <<   >>   >>>

           x << n  은 x*(2의 n승)의 결과값과 같다. x는 실수형은 불가하고 정수형만 가능함.
           x >> n  은 x가 양수일 경우 x/(2의 n승)의 결과값과 같다. x는 실수형은 불가하고 정수형만 가능함. 
           x >>> n 은 정수 x를 32bit 형태의 2진수로 나타낸후 오른쪽으로 n번 이동시키고 빈자리는 0으로 채운다.
        

		int n = 10;
		System.out.println("n+3 = " + (n+3) ); // n+3 = 13
		System.out.println("n-3 = " + (n-3) ); // n-3 = 7
		System.out.println("n*3 = " + (n*3) ); // n*3 = 30
		System.out.println("n/3 = " + (n/3) ); // n/3 = 3
		System.out.println("n%3 = " + (n%3) ); // n%3 = 1
		
		System.out.println("n<<3 = " + (n<<3) ); // n<<3 = 1

비트쉬프트
 int 는 4byte 이므로 32bit 로 구성된다.
 10<<3 은 정수 10을 이진수인 00000000 00000000 00000000 00001010 으로 나타내고
 왼쪽 방향으로 3개를 밀어버린다. ___00000 00000000 00000000 01010000
 
 10<<3 은 10*(2의3승) ==> 10*8 ==> 80 과 같은 것이 된다.
 
 10>>2 은 정수 10을 이진수인 00000000 00000000 00000000 00001010 으로 나타내고
 오른쪽 방향으로 2개를 밀어버린다. 00000000 00000000 00000000 00000010
 그런 다음에 _자리에는 정수 10의 최상위 부호비트(가장 왼쪽 비트1개, 양수이면 0이고 음수이면 1이다.)와 같은 값으로 채운
 
 10>>3 은 10*(2의3승) ==> 10*8 ==> 80 과 같은 것이 된다.
 
 즉, 10>>2는 10/(2의2승) ==> 10/4 ==> 2 와 같은 것이 된다.
 
 10>>>3은 정수 10을 이진수인 으로 나타내고 오른쪽 방향으로 3개를 밀어버린다. 그러면 이 되는데 그 뒤 _ 자리에는 0으로 채운다.

 

   >>> -10 을 bit 로 나타내어 주는 방법 <<<
    
     int 는 4byte 이므로 32 bit 로 구성된다.
     컴퓨터의 음수 표현 방법은 2의 보수 표현 방법을 사용한다.
     2의 보수란? 1의 보수(0은 1로, 1은 0으로 바꾸어 주는 것)
     
     -10을 이진수로 표현하면 다음과 같다.
     우선 10을 이진수로 나타내면 00000000 000000000 00000000 00001010 인데
     이것을 1의 보수로 만든다. 즉, 11111111 11111111 11111111 11110101
     여기에 +1을 하면 11111111 11111111 11111111 11110110 이 된다. 
     
     11111111 11111111 11111111 11110110을 십진수로 나타내어 보겠습니다.
     
     첫번째 bit 는 부호비트로 사용되어지는데 
      0 은 +(양수)임을 의미하고,
      1 은 -(음수)임을 의미한다.
      
     첫번째 bit 가 1인 경우, 즉 음수를 뜻할 경우에는 아래와 같이 구한다.
     똑같은 1이 나오는 것 중에서 마지막 1만 취하고, 여기에다가 그 나머지를 끝까지 취한다.
      10110
      첫번째 값만 -를 붙이고, 그 나머지 값은 + 로 연산을 하면 된다.
      -1*(2의4승) + 0*(2의3승) + 1*(2의2승) + 1*(2의1승) + 0*(2의0승)