자료형이 가지는 최대값을 초과하는 연산 시 overflow가 발생해 원하지 않는 값을 갖게 된다.
예) 1101 + 1001 = (1)0110
이것은 mod 연산과 동일한 값을 도출 한다고 함
2의 보수방식은 0의 표현이 하나뿐.
1의 보수방식에서 발생하는 +0,-0의 중복 문제가 없음
비 부호형과 마찬가지로 최대값을 초과흔 연산 시 overflow 발생.
덧셈만으로 뺄셈을 구현이 가능
예) A-B(B의 보수)
1의 보수와 달리 0의 표현이 하나
오버플로우 판별이 간단 (최상이 비트가 변할 때)
오버플로우: 곱셈 결과가 타입이 표현할 수 있는 최대값을 넘으면, 상위 비트는 버려지고 하위 비트만 저장. 즉, 오버플로우가 발생해도 오류가 나지 않고, 결과값은 모듈러 연산(나머지 연산)처럼 동작
예) 8bit unsigned에서 200 x 4 = 800을 계산하면, 8비트로 표현 가능한 최대값은 255이므로, 실제 저장되는 값은 800 mod 256 =32
4.최적화의 이유
CPU는 시프트와 덧셈 연산을 곱셈보다 훨씬 빠르게 처리
컴파일러는 상수 곱셈을 자동으로 시프트와 덧셈으로 최적화하는 경우가 많음.
요새 이것만공부하니 꿈에 이진수 나올것같다