You just started working for a company that is implementing a set of procedures
to operatate on a data structure where 4 signed bytes are packed into a 32-bit
unsigned. Bytes within the word are numbered from 0 (least significant) to 3
(most significant). You have been assigned the task of implementing a function
for a machine using two's-complement arithmetic and arithemetic right shifts with
following prototype:
/* Declaration of data type where 4 bytes are packed
into an unsigned */
typedef unsigned packet_t;
/* Extract byte from word. Return as signed integer */
int xbyte(packet_t word, int bytenum);
That is, the function will extract the designed byte and sign extend it to be a
32-bit int.
Your predecessor (who was fired for incompetence) wrote following cod
/* Failed attempt at xbyte */
int xbyte(packet_t word, int bytenum)
{
return (word >> (bytenum << 3)) & 0xFF;
}
A. What is wroing with this code?
B. Give a correct implementation of the function that uses only left and righ
shifts, along with one subtraction.