시프트 연산 쓸때마다 오버플로우나면 어떻게되는지 까먹어서 적어봄
<<연산
피연산자 양수시
오버플로우시 버려짐
805306368 (001100...) << 2 = -1.0G
805306368 (001100...) << 3 = -2.1G
805306368 (001100...) << 4 = 0
피연산자가 32이상일 경우 32로 나눈 나머지로 간주
805306368 (001100...) << 31 = 0
805306368 (001100...) << 32 = 805306368
피연산자 음수시
기본적으로 0
오버플로우시 순환됨
6 (...00110) << -1 = 0
6 (...00110) << -2 = -2.1G
6 (...00110) << -3 = -1.0G
6 << -1 은 6 << 31과 같음
그러니까 피연산자가 음수면 32xN만큼 더해서 양수로 만들고 계산한다고 보면 됨
>>연산도 같음
기타 애매한 연산들 결과 보면
N / 0 = 0
N % 0 = 0
N % -M = N % M
1 ^ -1 = 1
N ^ -M = 0 (N > 1)
^ 연산시 초과 비트는 날라감
지나가는 팩린이 입니다 계속 지나가겠습니다
-1 MOD 32가 31이라 그런가보네 이런거 알면 회로 압축같은거 더 편해질듯?
그외 추가적으로 아래 적힌거는 Modular는 정수론에서도 저렇게 다루는걸로 암. 이건 확실치 않고, 1^-M같은 경우는 1/1^M이라서 어차피 항상1임 N>1인 K = N^-M의경우에 항상 0< K < 1이라 정수를 다루는 계산체계 특성상 소숫점아래는 다 버려지므로 0임.
그래이거 나도 엄청 많이 헷갈림 ㅋㅋㅋㅋㅋㅋ