음수보수법
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)
- 수 (int) 부분 bit를 채움
- 전체 bit를 반전
- 반전된 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
}
}