csapp datalab篇 getByte()详解

首先我们先看题目要求,如下图所示。
*/

  • 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
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值