1. 양수의 2의 보수 표현:
양수의 2의 보수 = 원래 코드
음수의 2의 보수 = {원래 코드의 부호 비트는 그대로 유지됨 } + {숫자 비트는 비트 단위로 반전됨 + 1} 또는
= {원래 코드의 부호 비트는 변경되지 않음} + {오른쪽에서 첫 번째 1 숫자 비트와 오른쪽의 0은 변경되지 않고 왼쪽의 위치는 부정됩니다.}
10진수 정수 +97과 -97을 예로 들어보세요:
+97 원본 코드 = 0110_0001b
+97 보수 = 0110_0001b
-97 원래 코드?= 1110_0001b
-97 보수?= 1001_1111b
2 . 순수 십진수 원본 코드:
순수 십진수 원본 코드를 얻는 방법은 무엇입니까? 여러 가지 방법이 있는데, 서면 계산에 더 편리한 방법이 있습니다.
0.64를 예로 들면 원래 코드는 0.1010_0011_1101_0111b입니다.
연산 방법:
0.64 * 2^n을 변환하여 곱셈 결과의 정수 부분을 얻습니다.
여기서 n을 16으로 취하면
0.64d =?0.1010_0011_1101_0111b가 쿼리 결과와 일치한다고 볼 수 있습니다.
다시 실험하고 n을 12로 설정하면
을 얻습니다.
3. 순수 소수의 2의 보수:
순수 소수의 2의 보수가 따르는 규칙은 다음과 같습니다: 소수의 소스 코드를 얻은 후 소수 앞의 1자리 점은 기호를 나타내며, 가장 낮은 것(오른쪽)부터 시작하여 첫 번째 "1"을 찾아 적고, "1이 보이면 0을 쓰고, 0이 보이면 1을 씁니다."
-0.64를 예로 들면 원래 코드는 1.1010_0011_1101_0111b입니다.
보완 코드는 1.0101_1100_0010_1001b입니다.
물론 하드웨어 언어에서 바이너리로 표현하면 Verilog 등 소수점을 갖는 것이 불가능합니다(사실 소수점을 어디에 두어야 할지 모르겠습니다).
4. 일반적으로 이 경우 정수 연산으로 변환하는 것이 더 편리합니다. 쿼리 후 원래 코드는 1110_0011_1101_0111b입니다. process:
-97.64 * 2^16 = -6398935 =?1110_0001_1010_0011_1101_0111b, 여기서 소수점은 오른쪽에서 16번째 자리이며 이는 쿼리 결과와 일치합니다.
그러면 그 보수는 1001_1110_0101_1100_0010_1001b입니다. 여기에는 음수의 보수가 사용됩니다. = {원래 코드의 부호 비트는 그대로 유지됩니다.} + {숫자 비트는 비트 단위로 반전됩니다. + 1} ?Method
< p>5. 코드를 보완하여 원래 코드를 얻습니다.방법: 부호 비트가 이동하지 않거나 진폭 값이 +1 반전되거나 부호 비트가 이동하지 않고 진폭 값이 -1 역수
-97.64 보수=?1001_1110(.)0101_1100_0010_1001b
부정=?1110_0001(.)1010_0011_1101_0110b
+1 =?1110_0001(.) 1010_0011_1101_01 11b는 쿼리 결과와 일치합니다
6. 2의 보수 코드 확장:
필요한 경우 2의 보수 코드는 연산 중에 디지털 방식으로 확장되어야 합니다. 비트를 앞으로 확장해야 합니다.
-5의 보수 = 4'b1011 = 6'b11_1011
ps. 원래 코드의 확장은 부호 비트를 맨 앞으로 가져온 다음 상위에 0을 추가하는 것입니다. 확장 비트의 일부입니다.
p>
-5 원본 코드 = 4'b'1101 = 6'b10_0101이고, 보완 코드는 6'b11_1011로 위와 일치합니다.
확장 정보:
컴퓨터에서 기호 숫자를 표현하는 방법에는 원본 코드, 보완 코드, 보완 코드의 세 가지가 있습니다. 세 가지 표현 방법은 모두 부호 비트와 숫자 비트의 두 부분으로 구성됩니다. 부호 비트는 "양수"를 나타내기 위해 0을 사용하고 "음수"를 나타내기 위해 1을 사용합니다. 그러나 숫자 비트는 세 가지 표현 방법에서 다릅니다.
컴퓨터 시스템에서는 값이 항상 자신의 보수 코드를 사용하여 표현되고 저장됩니다. 그 이유는 보수 코드를 사용하면 부호 비트와 숫자 필드를 동시에 균일하게 처리할 수 있고 덧셈과 뺄셈도 균일하게 처리할 수 있기 때문입니다. 또한, 보완코드와 원본코드를 변환하는 동작과정은 동일하며 추가적인 하드웨어 회로가 필요하지 않다.