• 售前

  • 售后

热门帖子
入门百科

CSAPP第二章实验datalab解答

[复制链接]
静美人2017 显示全部楼层 发表于 2022-1-16 11:34:37 |阅读模式 打印 上一主题 下一主题
第1题 用按位与和取反实现按位异或
要求如下:
  1. bitXor - x^y using only ~ and &
  2. Example: bitXor(4, 5) = 1
  3. Legal ops: ~ &
  4. Max ops: 14
  5. Rating: 1
复制代码
假如学过数电大概是数理逻辑的话,这题应该不难,假如是数电的标题,实际上就是让你用与门和非门来实现异或。对于数理逻辑而言,也就是用与和非来实现异或,我们知道,异或就是差异则为1,类似则为0,对于单独的一位而言,就是1和0大概0和1这两种组合可以异或得到1,而对于位向量而言,也就是x&~y大概~x&y。这里须要一个或操纵,但是并不允许我们使用,那么思绪就是用与和非来实现或,在离散数学中我们知道,与和非这两个联结词的聚集是极小全功能的,等价于与或非这三个联结词的聚集,这是由于或是可以用与和非表现的,也就是x|y = ~(~x&~y),这里的证实可以使用 De Morgan’s laws 。于是只须要把这里的x和y更换成上面的两个就行了。
代码如下:
  1. int bitXor(int x, int y) {
  2.         /*
  3.         Since "x bitXor y" equals "(x & ~y) | (~x & y)",
  4.         we just need to implement "|" with just "&" and "~".
  5.         And "x | y" equals "~(~x & ~y)".
  6.         */
  7.         int x_and_noty = x & ~y;
  8.         int notx_and_y = ~x & y;
  9.         int not_x_and_noty = ~x_and_noty;
  10.         int not_notx_and_y = ~notx_and_y;
  11.         int x_bitXor_y = ~(not_x_and_noty & not_notx_and_y);
  12.         return x_bitXor_y;
  13. }
复制代码
第2题 返回补码中的最小值Tmin
要求如下:
  1. tmin - return minimum two's complement integer
  2. Legal ops: ! ~ & ^ | + << >>
  3. Max ops: 4
  4. Rating: 1
复制代码
这题并不难,由于                               T                      m                      i                      n                          Tmin               Tmin 实际上就是100..0,一个1背面跟着31个0(由于int是32位的)。于是只须要将00..1,也就是十进制数值的+1,左移31位,就可以得到了。
代码如下:
[code]int tmin(void) {        /*        The bit expression of Tmin is 100..00, with one '1' followed by thirty-one '0'.        So we just need to shift 000..01 left 31 positions,        so that the '1' will be at the leftmost position, namely, Tmin.        */          int one = 1;          return one

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作