일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 시계열 상관 분석
- 상자 그림
- 다중상관분석
- 시계열 모델링
- 선형 판별 분석 LDA
- 명목형 데이터
- 날짜 시간 데이터 전처리
- ARMA 모델링
- 주성분 분석
- 최소-최대 정규화
- 시계열 특성을 고려한 이상치 탐지
- Python
- 군집화 시각화 방법
- 상위포지션
- 데이터 수집 및 전처리
- 다변량 분석
- 데이터 분석 프로세스
- 데이터의 차원 축소
- 주성분 줄이기
- Z-점수 기반 이상치 탐지
- 계절성 모델
- R과 Python
- 데이터 종류에 따른 분석 방법
- ARIMA 모델링
- 범주형 데이터
- custom vision
- Q-Q 플롯
- 상관 분석
- 지수평활법
- 순서형 데이터
- Today
- Total
me made it !
[CS]컴퓨터가 음수를 표현하는 방법 본문
음수 표현 아이디어
- 2의 보수 표현법
- 정수 오버플로우란?
우선, 컴퓨터가 4비트만 기억한다고 가정하고 시작하자.
0111 : 7을 뜻하고
1111 : -7을 뜻한다.
하지만, 이렇게 하면 0을 나타내는 방식이 두가지이다.
0000 : 0
1000 : -0
이렇게 0을 표현하는 방법이 두 가지라면, 어떠한 데이터가 0인지 확인하기 위해 쓸데없는 컴퓨터 자원을 낭비하게 된다.
또 다른 문제는, 양수의 음수의 덧셈을 할 때 부호를 고려해서 수행해야한다. 예를 들어 0001과 1001 을 더할때 1001이 -1이므로 뺄셈을 수행해야 한다.
2의 보수 표현법
1001 : -7의 이진수 표현 이다.
이유는 0111과 1001을 더하면 10000이 되는데, CPU가 4비트만 기억하므로 앞에 1은 버려져서 그냥 0000이 되기 때문이다.
- 참고로 두 개의 자료형을 더했을 때 범위를 벗어나는 비트는 그냥 버려지는 것이다. 마치 왼쪽으로 쉬프트 했을 때 맨 왼쪽에 있는 비트들이 버려지는 것을 생각하자.
쉽게 구하자면,
7의 2진수 표현인 0111의 비트를 모두 반전시키면 1000이 된다.
여기다 1을 더해서 1001으로 표현하면 된다.
반대로 -7에서 7로 가고 싶다면 1001의 부호를 모두 반전 시킨뒤 0110 다시 1을 더하면 양수인 7이 나온다 !
여기서 중요한 점은 0000의 2의 보수는 그대로 0000이다. 왜냐하면, 0000을 반전하면 1111이 되는데, 다시 1을 더하면 0000이 되기 때문 !
또한 어떤 수가 음수인지 양수인지 판단하는 방법도 매우 쉽다. 그냥 맨 앞 비트가 부호 비트라고 생각하면 된다. 예를 들어 1101의 경우 맨 앞 비트가 1이기 때문에 음수이다. 따라서 이 수가 어떤 값인지 알고 싶다면 보수를 구한 뒤에 1101 → 0010 → 0011만 붙여주면 3인 것을 알수 있고, 1101은 -3이다 !
정리 :
- 음수나 양수 사이 덧셈 시에 굳이 부호를 고려하지 않고 덧셈을 수행해도 된다.
- 맨 앞 비트를 사용해서 부호를 빠르게 알아낼 수 있다.
씹어먹는 C 언어 - <4 - 2. 컴퓨터가 음수를 표현하는 방법 (2의 보수)>
컴퓨터 상에서 정수인 음수를 표현하기 위해서 2 의 보수 표현법을 사용합니다. 이에 따라 int 상에서 오버플로우가 발생하였을 때 양수에서 값을 증가시켰더니 음수로 바뀌는 기적을 볼 수 있습
modoocode.com
'크래프톤 정글' 카테고리의 다른 글
[C언어] Go to 문 (0) | 2024.07.20 |
---|---|
[Python] read(), readline(), readlines()의 차이 (0) | 2024.07.19 |
[Python] For else 구문이 뭐야? (0) | 2024.07.17 |
[알고리즘] DFS 와 BFS (0) | 2024.07.13 |
[Python] strip() 과 split() 의 차이 (1) | 2024.07.12 |