음수보수법

byte a = 0;
byte b = 127;
sbyte c = -127;
  • byte 형식 및 sbyte 형식의 경우 0을 담고 있을 때는 8개의 bit가 모두 0
Number 0(Sign bit) 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1
2 0 0 0 0 0 0 1 0
3 0 0 0 0 0 0 1 1
127 0 1 1 1 1 1 1 1
  • Sign Bit가 0이면 양수, 1이면 음수

|Number|0(Sign bit)|1|2|3|4|5|6|7| |:–:|:–:|:–:|:–:|:–:|:–:|:–:|:–:|:–:| |?|1|1|1|1|1|1|1|1|

  • ?-127이면 발생하는 문제 🔅 부호와 절댓값 (Sign-and-magnitude)의 경우 -127이 맞음
  • 0의 경우 +0(0000 0000) ,-0(1000 0000)의 두가지 경우가 존재하는 문제 발생
  • 2의 보수법 (2’s Complement) 알고리즘을 사용하여 음수를 표현해야함

2의 보수법 (2’s Complement)

  1. 수 (int) 부분 bit를 채움
  2. 전체 bit를 반전
  3. 반전된 bit에 1을 더함

⭕️ -1을 2의 보수법으로 표현

|단계|0|1|2|3|4|5|6|7|설명| |:–:|:–:|:–:|:–:|:–:|:–:|:–:|:–:|:–:|:–| |1단계|0|0|0|0|0|0|0|1|1을 수 부분 비트에 입력| |2단계|1|1|1|1|1|1|1|0|8개의 비트 전체를 반전
0은 1, 1은 0| |3단계|1|1|1|1|1|1|1|1|반전된 비트에 1을 더함| 🔴 sbyte가 아닌 byte 형식을 표현하면 255가 됨

using static Console;  

public static class IntegralTypes  
{  
	private static void Main()  
	{   
		SignedUnsigned();  
	}  
	  
	private static void SignedUnsigned()  
	{  
		byte a = 255;  
		sbyte b = (sbyte)a;  
		WriteLine(a);  // 255
		WriteLine(b);  // -1
	}  
}