#### 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승)
'Java' 카테고리의 다른 글
| 연산자(Operator) 5. bit 연산자 6. 논리 연산자 (0) | 2022.06.06 |
|---|---|
| 연산자(Opperator) 2. 증감연산자, 3. bit 별 not 연산자, 4. 논리 부정 연산자 (0) | 2022.06.06 |
| 데이터형 변환하기(Casting) (0) | 2022.06.06 |
| 자료형(Data Type) 2 (0) | 2022.06.06 |
| 자료형(Data Type) (0) | 2022.06.06 |