你刚刚开始再一家公司工作,他们要实现一组过程来操作一个数据结构,要将4个有符号字节封装成一个32位unsigned.一个字中的字节从0(最低有效字节)编号到3(最高有效字节)。分配给你的任务是:为一个使用补码运算和算术右移的机器编写一个具有如下原型的函数:
typedef unsigned packed_t;
int xbyte(packed_t word,int bytenum); //函数的作用是从word中提取第(0,1,2,3)的字节。
你的前任(因为水平不够高而被解雇了)编写了下面的代码:
/*Failed attemp at xbyte */
int xbyte(packed_t word,int bytenum)
{
return (word >> (bytenum <<3)) & 0xff;
}
请教大神,错在哪里?