ICS data lab总结

ICS data lab总结


总述

data lab是一个考察整数位运算技巧和实数的浮点数表示位格式的lab,而且还有能使用的符号和符号数量限制。
这些题目自己做下来有一些智力游戏的感觉,而且要考虑的边界情况很多(尤其是0x80000000),有时候自己不知道做错了哪里经常需要利用lab给的举反例工具来举反例看自己错在哪里,然后再修改调试。但是这样一来次数多了,做完以后自己晕乎乎地都不知道对了没有,不像bomb lab做的时候晕乎乎,做完后想一想能清楚很多。所以做完以后我没有急着总结写报告,而是等了很久趁现在空了下来,我回忆了一下我还记得什么,我到底从中学到了什么。


其中值得学习的地方

做完data lab有一种很浓的智力游戏的感觉,虽然这个lab设计地很好很精巧,但是还是要承认,在对数据的二进制表示有一定熟练度以后这个lab大部分题目的应用真的不是很大,练习的技能似乎与实战脱节,至于追求更少op数,我觉得完全是对自己的智力的挑战,为了挑战困难的愉悦而奋斗,实际意义不大。(不过我很崇拜这些op数到了80-的人,一来他们真的很厉害,而来虽然这个没有实际太大意义,可是大学CS学习的东西虽然实用,更重要的内功的积累,所以学习不能太功利,而且享受这些看似无用的东西,遵从自己的兴趣,才能有一段美好的大学生活吧。)
但是其中还有几点很值得我们学习,一是(个别)的整数位运算技巧,比如取整数低位,在树状数组里用得很多,二是浮点数题目,让我们亲自实现加深了我们对IEEE标准的理解。

datalab中出现的整数位运算技巧题目

整数运算技巧主要有:掩码技术,整数运算溢出判断,异或应用,二分统计位级信息等技术。
但是还有一些lab里没有涉及的整数运算技巧,我觉得很重要,网上有很多文章,如果以后要面试什么的之前可以先看一看。

//1
/* 
 * thirdBits - return word with every third bit (starting from the LSB) set to 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 8
 *   Rating: 1
 */
int thirdBits(void) {
  int x=0x49;//1001001(8)
  x=x|(x<<9);//001001001001001001(18)
  x=x|(x<<18);//(36)
  return x;
}
/*
 * isTmin - returns 1 if x is the minimum, two's complement number,
 *     and 0 otherwise 
 *   Legal ops: ! ~ & ^ | +
 *   Max ops: 10
 *   Rating: 1
 */
int isTmin(int x) {
  int t=x+x;
  return !(t|(!x));
}
//2
/* 
 * isNotEqual - return 0 if x == y, and 1 otherwise 
 *   Examples: isNotEqual(5,5) = 0, isNotEqual(4,5) = 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 6
 *   Rating: 2
 */
int isNotEqual(int x, int y) {
  return !!(x^y);
}
/* 
 * anyOddBit - return 1 if any odd-numbered bit in word set to 1
 *   Examples anyOddBit(0x5) = 0, anyOddBit(0x7) = 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 12
 *   Rating: 2
 */
int anyOddBit(int x) {
  x|=x>>16;
  x|=x>>8;
  return !!(x&0xaa);
}
/* 
 * negate - return -x 
 *   Example: negate(1) = -1.
 *   Legal ops: ! 
  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值