>第 16 章 运算符详解>位运算>异或运算的一些特性

yuchen yuchen12@gmail.com
2009-06-23 22:56:55

3、对一个32位无符号整数做循环右移,函数原型是unsigned int rotate_right(unsigned int x);。所谓循环右移就是把低位移出去的部分再补到高位上去,例如rotate_right(0xdeadbeef, 16)的值应该是0xefdeadbe。
----------------------------------
函数原型应该是unsigned int rotate_right(unsigned int x, int n)吧,另外rotate_right(0xdeadbeef, 16)的值应该是0xbeefdead吧


宋劲杉 songjinshan@akaedu.org
2009-06-24 08:52:53

您说得非常对!谢谢指出!


姚磊 yaolei135@gmail.com
2009-07-12 23:07:32

首先纠正这个页面的一个链接问题:我是点击1.3节的习题点评到这个页面的,如果1.4节“异或运算的一些特性点评”却是跑到1.4节习题点评页面。1.4节习题点评链接为死链接。

再是一个问题,原文说:xorl %eax, %eax。...这条指令比同样效果的movl $0, %eax指令快,因为前者只需要在CPU内部计算,而后者需要访问内存。

为什么后一条指令需要访问内存呢?难道立即数0了要从内存中取,但第18章第1节讲指令“movl $1, %eax”又明确说到“这条指令不要求CPU读内存,1这个数是在CPU内部产生的,称为立即数(Immediate)”,是不是矛盾呢?望解释一下。


宋劲杉 songjinshan@akaedu.org
2009-07-14 13:44:03

链接已经纠正。你提的问题也很对,movl指令的效率是比xorl低,但并不是因为movl访问内存,等我再想想怎么解释,或者干脆就不解释了。谢谢指出!


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!