Solutions
A
Two's Complement is the standard for representing signed integers:
1
(i.e.-x = ~x + 1
).The above "number wheel" showing the relationship between 4-bit numerals and their Two's Complement interpretations is shown on the right:
7
whereas the smallest number is -8
-8
This section is designed as a conceptual check for you to determine if you conceptually understand and have any misconceptions about this topic. Please answer Yes / No to the following questions:
- A01 = ?
No.
Overflow errors only occur when the correct result of the addition falls outside the range of . Adding numbers of opposite signs will not result in numbers outside of this range.
- A02 = ?
No
In Two's Complement, the MSB is always
1
for a negative number. This means ALL Two's Complement negative numbers will be larger than the positive numbers.
- A03 = ?
Yes
In bias notation, we add a bias to the unsigned interpretation to create the value. This means that negative numbers will stay smaller than positive numbers. This is unlike Two's Complement.
B
Arithmetic overflow occurs when the result of a calculation can't be represented in the current encoding scheme (i.e., it lies outside of the representable range of values), resulting in an incorrect value.
c
(answer in HEX) such that c + 0x80
causes NEITHER signed nor unsigned overflow in 8 bits.
- B01 = ?
0x7F
Unsigned overflow will occur for
c > 0x80
. Signed overflow can only happen if c is negative (also> 0x80
). Largest is therefore,0x7F
c
(answer in HEX) such that c + 0x71
causes signed overflow, but NOT unsigned overflow in 8 bits.
- B02 = ?
0xF
For signed overflow, need
(+) + (+) = (−)
. For no unsigned overflow, need no carryout from MSB. The first(−)
encoding we can reach from0x71
is0x80
.0x80 – 0x71 = 0xF
.
C
According to IEEE 754 Floating Point Standard, the value of a real number can be represented in scientific binary notation as:
The binary representation for floating point values uses three fields:
S
: encodes the sign of the number (0 for positive, 1 for negative)E
: encodes the exponent in biased notation with a bias of M
: encodes the mantissa (or significand, or fraction) – stores the fractional portion, but does not include the implicit leading 1
.3145728.125
10 (broken down as ). Is it enough to represent this number single precision floating point? (Please answer Yes / No)
- C01 = ?
No
Could only represent . Not enough bits in the mantissa to hold , which caused rounding.
0x80000000
? (Answer with leading +
and -
)
- C02 = ?
-0
0xFF94BEEF
? (Answer with leading +
and -
)
- C03 = ?
NaN
0x41180000
? (Answer with leading +
and -
)
- C04 = ?
+9.5
0x41180000 = 0b 0|100 0001 0|001 1000 0…0.
S = 0, E = Exponent = E – bias = 3, Mantissa = 1.00112
- C05 = ?
0x00000001
0x00000001 =
- C06 = ?
0x00800000
0x00800000 =
0xFF800000
? (Answer with leading +
and -
)
- C07 = ?
-∞
0x421E4000
? (Answer with leading +
and -
)
- C08 = ?
+39.5625
D
Floating Point Mathematical Properties
If x
and y
are variable type float
, will the expression (x+2*y)-y==x+y
always be evaluated as true? (Please answer Yes / No with explanation.)
D01 = ?
No, Rounding error / Overflow (後者只要一個解釋符合就給分)
E
Compute the decimal result of the following arithmetic expressions involving 6-bit Two's Complement numbers as they would be calculated on a computer. Do any of these result in an overflow? Are all these operations possible?
0b100011 + 0b111010
- E01 = ?
Overflow
Adding together we get 0b1011101, however since we are working with 6-bit numbers we truncate the first digit to get 0b011101 = 29. Since we added two negative numbers and ended up with a positive number, this results in an overflow.
0xFF − 0xAA
- E02 = ?
Impossible
This is not possible, as these hex numbers would need 8 bits to represent and we are working with 6 bit numbers.
0x3B + 0x06
- E03 = ?
1
Converting to binary, we get 0b111011 + 0b000110 = (after truncating) 0b000001 = 1.
Despite the extra truncated bit, this is not an overflow as-5 + 6
indeed equals1
F
- F01 = ?
x == y
(只要有比較就給分)
x
as an unsigned integer. Please use bitwise operators and +
, -
, ==
to check if x
is a power of 2. Write down the expression in C without any branches (i.e., if
, else
, ? :
, do
, while
, for
, goto
)
- F02 = ?
x & (x - 1) == 0
absf
returns absolute value of a single precision float. What is the value of F03
? Answer in HEX.
- F03 = ?
0x7fffffff