datalab-handout代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
datalab-handout代码datalab-handout代码 #如果0
# endif
/ *
只使用~和|
例子:bitAnd(6,5)= 4
*法律行动:~ |
*最大行动:8
*等级:1
* /
int比特(int x,int y){
返回~((- x)|(~ y));/ *德摩根* /
}
/ *
从word x中提取字节n
*字节数从0(LSB)到3(MSB)
示例:getByte(0x12345678,1)= 0x56
*法律行动:!~ & ^ | + < < > >
*最大行动:6
*等级:2
* /
int getByte(int x,int n){
返回x > >(n < < 3)&0xff;
}
/ *
* logicalShift——用n把x移到右边,使用逻辑移位
可以假设0 < = n < = 31
示例:logicalShift(0x87654321,4)= 0x08765432
*法律行动:!~ & ^ | + < < > >
*最大行动:20
*等级:3
* /
int logicalShift(int x,int n){
int y = 1;
返回(~(((y < < 31)> > n)< < 1)&(x > > n);/ *等效于&(0 xffffffff > > n消除负数右移时高位补1产生的影响* /
}
/ *
*位数-返回数1的数
示例:bitCount(5)= 2,bitCount(7)= 3
*法律行动:!~ & ^ | + < < > >
*最大行动:40
*等级:4
* /
int bitCount(int x){
int n = 0 x1 | 0 x1 < < 8 | 0 x1 < < 16 | 0 x1 < < 24;/ *相当于把n 定义成1个有四个元素的数组,每个元素都为1 * /
int数= 0;
数+ = x n;/ *对x的每一位与n相与,把结果加到计算中,计算也相当于一个四个元素的数组* /
数+ = x > > 1 n;
数+ = x > > 2 n;
数+ = x > > 3 n;
数+ = x > > 4 n;
数+ = x > > 5 n;
数+ = x > > 6 n;
数+ = x > > 7 n;
返回(count&0xf)+(数> > 8 &0xf)+(数> > 16 &0xf)+(数> > 24 &0xf);/ *把计数的每八位移到低八位,作为一个单独的数相加* /
}
/ *
* bang -计算!x不使用!
例子:bang(3)= 0,bang(0)= 1
*法律行动:~ & ^ | + < < > >
*最大行动:12
*等级:4
* /
int爆炸(int x){
返回(((x |(~ x + 1))> > 31)&0x1)^ 0 x1;/ * - x = x + 1)(~,x
如果非0,则(x)|(~ x + 1)的符号位为1,如果为0,反之。最后把符号位与1做异或运算* /
}
/ *
* tmin -返回最小二的补数
*法律行动:!~ & ^ | + < < > >
*最大行动:4
*等级:1
* /
int tmin(空白){
返回0 x1 < < 31;/ *返回最小二进制整数* /
}
/ *
* fitsBits -如果x可以表示为一个,返回1
* n位,两个整数。
* 1 < = n < = 32
例子:fitsBits(5,3)= 0,fitsBits(- 4,3)= 1
*法律行动:!~ & ^ | + < < > >
*最大行动:15
*等级:2
* /
int . fitsBits(int x,int n){
int转变= 33 + ~ n;/ * 32 +(~ n + 1)= 32-n * /
回报!(x ^((x < <转变)> >转变));/ * x的前32-n都为0或1,可以假定第n - 1位为符号位,通过左移右移后比较与原数是否有差别* /
/ * int y = x > >(n + ~ 0);
x = x > >(n + ~ 0);
X = x + (x & 1);
The return! X; * /
}
/ *
* divpwr2 - Compute x/(2 ^ n), the for 0 < = n < = 30
* Round toward zero
* Examples: divpwr2 (15, 1) = 7, divpwr2 (-33, 4) = -2
* Legal ops:! ~ & ^ | + < < > >
* Max ops: 15
* Rating: 2
* /
Int divpwr2 (int x, int n) {
Int flag = x > > 31;
Int bias = (1 < < n) + (~ 0); / * to count negative moves to the right operation need more small for 2 ^ n - 1 the offset value of book p65 * /
(flag&bias)
}
/ *
* negate - return - x
* Example: negate (1) = -1.
* Legal ops:! ~ & ^ | + < < > >
* Max ops: 5