当x有偶数个1时输出1,否则输出0。

代码:

习题汇总

 测试数据:

0=00000000

3=00000011

167=10100111

243=11110011

习题汇总

原理:

在假设int有32位的情况下,第一次异或的结果得出每两位1的个数的奇偶性,以末两位为例,若末两位为偶数个1,则得数最后一位为0,以此类推;

同理第二次异或得出每四位1的个数的奇偶性,以末四位为例,若末四位为偶数个1,则得数最后一位为0,以此类推;

......

五次异或后,最后一位得出所有32位的1的奇偶性,若有偶数个1,最后一位为0,否则为1,将得数与1异或为返回值。

 

 
 

习题3.66


习题汇总

由题假设: CNT=A;

struct a_struct{

int idx;

int x[B];

}

 

c代码可得:

n=*bp+*(bp+4+4A(B+1))

ap=bp+4+4(B+1)i

ap->idx=*(bp+4+4(B+1)i)

ap->x[ap->idx]=bp+4+4(B+1)i+4+4·*(bp+4+4(B+1)i)=n

 

另反汇编代码可得:

5   i->eax

6   bp->ecx

7   28i->ebx

8   8i->edx

9   7i->edx

10  *(28i+bp+4)+7i->edx

11  *(bp+200)->eax

12  *bp+*(bp+200) ->eax

13  eax->*(edx·4+bp+8)

 

可轻易看出反汇编代码12行对应c代码第9行,反汇编代码13行对应c代码11行。

 

故综上可得:

4A(B+1)+4=200且4(B+1)=28

故A=7,B=6。

当x有偶数个1时输出1,否则输出0。

代码:

习题汇总

 测试数据:

0=00000000

3=00000011

167=10100111

243=11110011

习题汇总

原理:

在假设int有32位的情况下,第一次异或的结果得出每两位1的个数的奇偶性,以末两位为例,若末两位为偶数个1,则得数最后一位为0,以此类推;

同理第二次异或得出每四位1的个数的奇偶性,以末四位为例,若末四位为偶数个1,则得数最后一位为0,以此类推;

......

五次异或后,最后一位得出所有32位的1的奇偶性,若有偶数个1,最后一位为0,否则为1,将得数与1异或为返回值。

 

习题汇总

由题假设: CNT=A;

struct a_struct{

int idx;

int x[B];

}

 

c代码可得:

n=*bp+*(bp+4+4A(B+1))

ap=bp+4+4(B+1)i

ap->idx=*(bp+4+4(B+1)i)

ap->x[ap->idx]=bp+4+4(B+1)i+4+4·*(bp+4+4(B+1)i)=n

 

另反汇编代码可得:

5   i->eax

6   bp->ecx

7   28i->ebx

8   8i->edx

9   7i->edx

10  *(28i+bp+4)+7i->edx

11  *(bp+200)->eax

12  *bp+*(bp+200) ->eax

13  eax->*(edx·4+bp+8)

 

可轻易看出反汇编代码12行对应c代码第9行,反汇编代码13行对应c代码11行。

 

故综上可得:

4A(B+1)+4=200且4(B+1)=28

故A=7,B=6。

相关文章:

  • 2021-10-02
  • 2022-01-24
  • 2021-07-07
  • 2021-12-18
  • 2021-08-21
  • 2021-12-04
  • 2021-09-26
  • 2021-10-23
猜你喜欢
  • 2021-06-23
  • 2021-12-18
  • 2021-12-10
  • 2021-09-20
  • 2022-12-23
  • 2021-07-21
  • 2021-12-02
相关资源
相似解决方案