C의 경우,
unsigned int i = (1 << 32) -1
은 오버플로우 에러를 발생시킵니다.
그런데 Go언어의 경우,
var i uint32 = (1 << 32) -1
은 에러없이 이진수로 11111...11 최대값이 출력됩니다.
단순히 1 << 32 만 연산하면 오버플로우 에러를 발생시키는데,
(1 << 32) - 1 을 묶어서 연산하면 에러없이 의도한 값이 출력됩니다.
내부적으로 32 bit를 넘으면 넘어선 bit는 잘린다고 알고 있는데,
Go에서는 내부적으로 어떤 처리를 하고 있길래
이후의 뺄셈 연산이 정상적으로 되는 걸까요?