Autosave: 2024-03-20 07:50:03
This commit is contained in:
parent
5a4f6f0e52
commit
0ee2d4c42d
2 changed files with 17 additions and 128 deletions
|
@ -9,131 +9,10 @@ tags: [binary, binary-encoding]
|
||||||
- To represent negative integers in binary we use signed numbers._Signed binary_
|
- To represent negative integers in binary we use signed numbers._Signed binary_
|
||||||
includes negative integers, _unsigned binary_ does not.
|
includes negative integers, _unsigned binary_ does not.
|
||||||
|
|
||||||
- The principal methnod for encoding signed binary numbers is called **two's
|
- There are different methods of implementing the encoding of signed numbers.
|
||||||
complement**.
|
Two prominant approaches are **two's complement** and **signed magnitude
|
||||||
|
representation**.
|
||||||
|
|
||||||
## Related notes
|
## Related notes
|
||||||
|
|
||||||
In order to represent negative integers alonside positive integers a natural
|
[[gktb#detail|two's complement ❯ Detail]]
|
||||||
approach is to divide the available
|
|
||||||
[encoding space / word length](Binary_encoding.md) into two subsets: one for
|
|
||||||
representing non-negative integers and one for representing negative integers.
|
|
||||||
|
|
||||||
The primary method for doing this is to use _two's complement_. This method
|
|
||||||
makes signed numbers possible in a way that complicates the hardware
|
|
||||||
implementation of the binary arithmetic operations as little as possible.
|
|
||||||
|
|
||||||
## Two's complement
|
|
||||||
|
|
||||||
Signed numbers can be implemented in binary in a number of ways. The differences
|
|
||||||
come down to how you choose to encode the negative integers. A common method is
|
|
||||||
to use "two's complement".
|
|
||||||
|
|
||||||
> The two's complement of a given binary number is its negative equivalent
|
|
||||||
|
|
||||||
For example the two's complement of $0101$ (binary 5) is $1011$. There is a
|
|
||||||
simple algorithm at work to generate the complement for 4-bit number:
|
|
||||||
|
|
||||||
1. Take the unsigned number, and flip the bits. In other words: invert the
|
|
||||||
values, so $0$ becomes $1$ and $1$ becomes $0$.
|
|
||||||
2. Add one
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
To translate a signed number to an unsigned number you flip them back and still
|
|
||||||
add one:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Formal expresssion: $2^n - x$
|
|
||||||
|
|
||||||
The heuristic account of deriving two's complement above can be formalised as
|
|
||||||
follows:
|
|
||||||
|
|
||||||
> in a binary system that uses a word size of $n$ bits, the two's complement
|
|
||||||
> binary code that represents negative $x$ is taken to be the code that
|
|
||||||
> represents $2^n - x$
|
|
||||||
|
|
||||||
Let's demonstrate this, again using -5 as the value we wish to encode.
|
|
||||||
|
|
||||||
Applying the formula to a 4-bit system, negative 5 can be derived as follows:
|
|
||||||
|
|
||||||
$$
|
|
||||||
2^4 -5
|
|
||||||
$$
|
|
||||||
|
|
||||||
$$
|
|
||||||
16 -5 = 11
|
|
||||||
$$
|
|
||||||
|
|
||||||
$$
|
|
||||||
11 = 1011
|
|
||||||
$$
|
|
||||||
|
|
||||||
So basically we carry out the subtraction against the word length and then
|
|
||||||
convert the decimal result to binary.
|
|
||||||
|
|
||||||
We can also confirm the output by noting that when the binary form of the number
|
|
||||||
and its negative are added the sum will be `0000` if we ignore the overflow bit:
|
|
||||||
|
|
||||||
$$
|
|
||||||
1011 + 0101 = 0000
|
|
||||||
$$
|
|
||||||
|
|
||||||
(This makes sense if we recall that earlier we derived the complement by
|
|
||||||
inverting the bits.)
|
|
||||||
|
|
||||||
### Advantages
|
|
||||||
|
|
||||||
The chief advantage of the two's complement technique of signing numbers is that
|
|
||||||
its circuit implementation is no different from the adding of two unsigned
|
|
||||||
numbers. Once the signing algorithm is applied the addition can be passed
|
|
||||||
through an [adder](Half_adder_and_full_adder.md) component without any special
|
|
||||||
handling or additional hardware.
|
|
||||||
|
|
||||||
Let's demonstrate this with the following addition:
|
|
||||||
|
|
||||||
$$
|
|
||||||
7 + -3 = 4
|
|
||||||
$$
|
|
||||||
|
|
||||||
First we convert $7$ to binary: $0111$.
|
|
||||||
|
|
||||||
Then we convert $-3$ to unsigned binary, by converting $3$ to its two's
|
|
||||||
complement
|
|
||||||
|
|
||||||
$$
|
|
||||||
0011 \rArr 1100 \rArr 1101
|
|
||||||
$$
|
|
||||||
|
|
||||||
Then we simply add the binary numbers regardless of whether they happen to be
|
|
||||||
positive or negative integers in decimal:
|
|
||||||
|
|
||||||
$$
|
|
||||||
0111 \\
|
|
||||||
1101 \\
|
|
||||||
====\\
|
|
||||||
0100
|
|
||||||
$$
|
|
||||||
|
|
||||||
Which is 4. This means the calculation above would be identical whether we were
|
|
||||||
calculating $7 + -3$ or $7 + 13$.
|
|
||||||
|
|
||||||
The ease by which we conduct signed arithmetic with standard hardware contrasts
|
|
||||||
with alternative approaches to signing numbers. An example of another approach
|
|
||||||
is **signed magnitude representation**. A basic implemetation of this would be
|
|
||||||
to say that for a given bit-length (6, 16, 32...) if the
|
|
||||||
[most significant bit](Half_adder_and_full_adder.md#binary-arithmetic) is a 0
|
|
||||||
then the number is positive. If it is 1 then it is negative.
|
|
||||||
|
|
||||||
This works but it requires extra complexity to in a system's design to account
|
|
||||||
for the bit that has a special meaning. Adder components would need to be
|
|
||||||
modified to account for it.
|
|
||||||
|
|
||||||
## Considerations
|
|
||||||
|
|
||||||
A limitation of signed numbers via two's complement is that it reduces the total
|
|
||||||
informational capacity of a 4-bit number. Instead 16 permutations of bits giving
|
|
||||||
you sixteen integers you instead have 8 integers and 8 of their negative
|
|
||||||
equivalents. So if you wanted to represent integers greater than decimal 8 you
|
|
||||||
would need to increase the bit length.
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
id: gktb
|
id: gktb
|
||||||
title: Two's complement
|
title: Two's complement
|
||||||
tags: []
|
tags: [binary, binary-encoding]
|
||||||
created: Tuesday, March 19, 2024
|
created: Tuesday, March 19, 2024
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -12,7 +12,13 @@ created: Tuesday, March 19, 2024
|
||||||
- _Two's complement_ is a method for representing signed numbers (negative
|
- _Two's complement_ is a method for representing signed numbers (negative
|
||||||
integers) in binary.
|
integers) in binary.
|
||||||
|
|
||||||
- The two's complement of a given binary integer is its negative equivalent.
|
- It is derived by inverting the values of an unsigned binary integer to create
|
||||||
|
its signed equivalent.
|
||||||
|
|
||||||
|
- A benefit is that hardware implementation of the binary arithmetic of signed
|
||||||
|
and unsigned numbers can be handled in the same manner as unsigned numbers,
|
||||||
|
requiring no additional handling. A drawback is that it halves the
|
||||||
|
informational capacity of the given word length for the binary system.
|
||||||
|
|
||||||
## Detail
|
## Detail
|
||||||
|
|
||||||
|
@ -82,8 +88,12 @@ $$
|
||||||
|
|
||||||
- In a 4-bit system instead of 16 total unique encodings of integers you have 8
|
- In a 4-bit system instead of 16 total unique encodings of integers you have 8
|
||||||
encodings for positive integers and 8 encodings for the their signed
|
encodings for positive integers and 8 encodings for the their signed
|
||||||
equivalent.
|
equivalent. For integers larger than denary 8 you would need to increase the
|
||||||
|
bit length of the system
|
||||||
|
|
||||||
|
- Consequently two's complement can necessitate larger overall word lengths.
|
||||||
|
|
||||||
## Related notes
|
## Related notes
|
||||||
|
|
||||||
[[Signed_and_unsigned_numbers|signed_and_unsigned_numbers]]
|
[[Signed_and_unsigned_numbers|signed_and_unsigned_numbers]]
|
||||||
|
[[Binary_addition|binary addition]]
|
||||||
|
|
Loading…
Add table
Reference in a new issue