首先我们先看题目要求,如下图所示。
*/
- getByte - Extract byte n from word x
- Bytes numbered from 0 (LSB) to 3 (MSB)
- Examples: getByte(0x12345678,1) = 0x56
- Legal ops: ! ~ & ^ | + << >>
- Max ops: 6
- Rating: 2
/*
题目中的意思是让我们用getByte(int x ,int n)函数,获取若n = 1则获取第一个字节。解题之前去补了下基础,一个字节(Byte)是由8个位(bit)组成的如
1000 1000 这8个位就是一个字节,而题目中0x代表16进制,而16进制的数由4个位组成,如0xF = 1111(4个1就是四个位) ,我们这里以n = 1为例,即取第1个字节。0x12345678,从右往左数第0个字节是0x78,那么第一个字节就应该是0x56.
解题思路一:
int getByte(int x, int n) {
int shift = 8 * n;
return (x>>shift)&0xff;
}
要取多少个字节就是将原数向右移8*n个单位,移完后发现剩下0x123456.用0xff与其作and运算即可完成运算,这里打个比方为何要和0xff&啊,16进制的0x7FFE = 1111 1111 1111 1110 与0xff作and运算后如下:
1111 1111 1111 1110
0000 000 1111 1111 &
=000 0000 1111 1110
=0xFE