datalab-handout代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档