정수의 bit 화
자바에서의 Integer는 4 Bytes이다.
1byte = 8 bits 이기 때문에 총 32개의 공간에 정수가 저장되게 된다.
Integer = 4 bytes (1byte = 8 bits)
= 32 bits
ex) int i = 8;
00000000 00000000 00000000 00001000
(나머지 공간은 0으로 저장되게 된다.)
32개의 공간에 표현할 수 있는 숫자의 개수는 몇 가지 인가?
4 bytes = 32 bits = 2^32
위와 같이 표현할 수 있는 숫자의 가짓수는 2^32개를 표현할 수 있는 것이 맞다.
표현할 수 있는 숫자의 최대 크기는 몇인가?
숫자는 0부터 시작한다는 것을 감안하자
2^32 -1 이 된다.
난 이쪽이 잘 이해가 가지 않았다
1+2^1 + 2^2+ 2^3+...+2^31
=
2^32-1
이것이 어떻게 성립하는가?
정수로 표현할 수 있는 가장 큰 가짓수는
11111111 11111111 11111111 11111111
바로 다음은 아래의 것이다.
1 00000000 00000000 00000000 00000000
바로 다음이니깐 이것에서 -1만 하면 정수로 표현할 수 있는 최대 값이 되는 것이다.
양수 음수의 구별
31번째 공간이 0 이면 양수
31번째 공간이 1 이면 음수
양수일 때는 31번째 공간이 0이므로 표현할 수 있는 최대 수가 2^31-1로 줄었다.
그러므로 사용할 수 있는 공간은
-2^31부터 2^31 -1 까지이다.
양수의 표현
- 양수는 simple하다 31번째 자리에 0만 넣어주고 나머지는 숫자에 맞게 세팅
음수의 표현
- 음수는 조금 다르다 31번째 자리에 0을 넣어주고 나머지는 숫자에 맞게 세팅하는것이 아니라
- 가장 31번째 방을 제외한 나머지 공간에 가장 큰 값 즉 모두 1인 경우에 -1이 된다.
(음수는 정수의 수가 가장 작은 것이 가장 큰수인점을 고려)
11111111 11111111 11111111 11111111-> -1
2진수 연산
더하기
빼기
OR : 두개중 하나라도 1이면 결과는 1
& : 둘다 1일 경우에만 결과가 1
~ : 0과 1 반대
xor : 두개가 서로 다른 값을 가지고 있을 떄 1로 세팅
0으로 xor 연산을 한 경우에는 자기 자신이 나온다.
1을 xor 연산을 한 경우에는 ~(자기자신) 의 결과가 나온다.
자기자신을 xor연산을 한 경우에는 0 이 나온다.
shift 연산 : 화살표의 방향에 따라 왼쪽 혹은 오른쪽으로 시프트한다.
shift 연산의 두가지 방법
- sign bit를 염두하는 방법
- sign bit를 염두하지 않는 방법
Logical Right Shift
>>> 그냥 무조건 우측으로 시프트 (31번째 방 포함)
Arithmetic Right Shift
>> 옆으로 shift 한것은 이전과 동일하지만 31번째 방의 수는 유지한다. (부호만큼은 포기 못하겠다는 의미)
References
'Java > Java' 카테고리의 다른 글
(JAVA) equals에 대해서(4) (0) | 2020.02.09 |
---|---|
(JAVA) 비트연산(2) (0) | 2020.02.08 |
(JAVA) equals에 대해서(3) (0) | 2020.02.07 |
(JAVA) Exceptions in Java (2) - checked, unchecked (0) | 2020.02.04 |
(JAVA) Exceptions in Java (1) (0) | 2020.02.03 |