C# 부호(+, -)에 대한 비트 변환
오늘은 기초적인 것에 대해 한번 설명해 볼까 합니다. 꼭 C# 에만 해당하는 것은 아니고 (-)를 2의 보수로 표현하는 모든 컴퓨터 프로그래밍 언어가 이런 변환을 거치게 됩니다.
자... 일단 Int32의 178을 예로 들어 보면 2진수로 다음과 같이 표현됩니다.
178 == 10110010
그런데, 이것을 signed byte (sbyte)로 변환하면 -78로 표현됩니다. 왜 그럴까요? 이에 대해서는 178을 2의 보수로 연산했던 것을 역으로 다시 계산해 주면 됩니다. (참고로 C#은 byte가 unsigned이지만, 자바는 byte가 signed 입니다.)
Int32 == 178 == 10110010
==> 1을 빼고 == 10110001
==> 1의 보수 == 01001110 ==> 78
다시 78을 음수 -78로 변환해 볼까요? 이제 2의 보수를 사용해 주면 됩니다.
78 == 01001110
==> 1의 보수 == 10110001
==> 1을 더하면 == 10110010 ==> -78 ==> Int32의 178과 동일
2진수 변환 없이 간단하게 변환하려면 이런 규칙으로 하시면 됩니다.
byte.MaxValue == 256
129가 음수로 표현되는 수 == -(byte.MaxValue - 129 + 1) == -127
178이 음수로 표현되는 수 == -(byte.MaxValue - 178 + 1) == -78
250이 음수로 표현되는 수 == -(byte.MaxValue - 250 + 1) == -6
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]