csapp datalab 实验报告:位运算实现各种操作

本文通过位运算实现各种操作,如异或、取最小值、取最大值、奇数位判断、取负、ASCII字符判断等。利用摩根定理、补码和位移等知识,巧妙地运用位运算完成各种逻辑。例如,isAsciiDigit通过位运算判断字符是否为ASCII数字,negate通过取反加1实现取负操作。
摘要由CSDN通过智能技术生成

1.bitXor:要求限用运算符实现异或,实际上我们知道逻辑异或可以只用与或非三类运算组合实现,因此很容易得到a^b=((a&b)|(a&b)),但是题目没让我们使用或运算符,根据摩根定理我们可以得到:(a&b)=a|b,带入即可得到答案。

2.tmin:返回int的最小值,int属于有符号数,负数存储以补码形式,因此我们很容易得到-2147483648的补码就是0x80000000,拆成二进制就是1后面31个0,我们通过对1移位运算得到是1<<31

3.Tmax:判断x是否为int的最大值,判断一个数是否为一个数的运算我们很容易想到异或,异或值为0当且仅当两个数相等时得到。最大值可以通过移位取反(1<<31)得到0x7fffffff,那么判断就容易多了。!(x^((1<<31))

  1. allOddBits:判断二进制奇数位上是否全为1,我们可以先把偶数位的所有数置0,奇数位不变,置0,不变,很容易想得到&运算,那么在把偶数位全部置0之后结果肯定=0xAAAAAAAA的,不等则返回0,那还是异或运算。!((x&0xAAAAAAAA)^0xAAAAAAAA)

  2. negate:取负运算很简单,~x+1

  3. isAsciiDigit:判断x是否在0x30~0x39之间,并且这里允许用+运算符,众所周知,有+就可以实现减法运算,我们只要把x-0x30之后看看它是否为正且x-0x3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xi@0ji233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值