一群问题

wafx5545592 2012-02-05 11:12:43
首先是关于《深入理解计算机系统》的:
1.P41 练习题2.14只使用位级和逻辑运算,写出等价x==y
当时对于^的作用理解并不清楚,所以写了一个很冗长的判别式,不知对不对
!(((~x)&y)%%1)

2.P52 练习题2.21

int fun1(unsigned word)
{
return (int) ((word<<24)>>224);
}
int fun2(unsigned word)
{
return ((int)word<<24)>>24;
}

假设是32位字长的机器,有符号数值的右移是算术右移,无符号右移是逻辑右移
w=256,问fun1(256),fun2(256)
我的结果是256和0xffffff00
结果答案是两个0,能否讲解下?

3.P78 示例代码中

double recip(int demon)
{
return 1.0/(double) demon;
}
..
void test(int demon)
{
double r1,r2;
int t1,t2;

r1=recip(demon);//stored in memory
r2=recip(demon);//stored in register
..
}

关键在那两句注释,为什么同样的调用,存储的地方就不一样了呢??

最后还有一个玩游戏想到的问题:
魔兽争霸的网上对战怎么实现的,它的数据在哪里处理啊,是建房的,还是平台(浩方,VS),还是其他什么的,简介下,顺便介绍本书吧,谢谢!
另外局域网对战呢,难道所有数据都在主机上面处理的??
...全文
110 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xspace_time 2012-02-11
  • 打赏
  • 举报
回复
如果x==y,那么每位相同,进行异或运算
移位是在寄存器中进行的,超出的舍掉,256等于2的8次方,即第9位为1,其它位为0,9+24=33,因此为0
可能是Inter优化了吧
wafx5545592 2012-02-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lactoferrin 的回复:]
你运行这个
#include<stdio.h>
int main()
{
printf("%d",256<<24);
return 0;
}
[/Quote]
老哥多谢!
wafx5545592 2012-02-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lactoferrin 的回复:]
你运行这个
#include<stdio.h>
int main()
{
printf("%d",256<<24);
return 0;
}
[/Quote]
O了,我在calc下面看了下!
wafx5545592 2012-02-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lactoferrin 的回复:]
最新是第二版

double recip(int demon)
{
return 1.0/(double) demon;
}
..
void test(int demon)
{
double r1,r2;
int t1,t2;

r1=recip(demon);//stored in memory
r2=recip(demon);//stored in register
……
[/Quote]
原来是这样,那么说来最新的中文,就是机工出版社的那本....周围黑皮的那个啊...还是喜欢电力出版社的,要漂亮些,嘿嘿!
Lactoferrin 2012-02-06
  • 打赏
  • 举报
回复
你运行这个
#include<stdio.h>
int main()
{
printf("%d",256<<24);
return 0;
}
wafx5545592 2012-02-06
  • 打赏
  • 举报
回复
2.我突然想起右移的两种,但是我的答案还是错的啊,我的答案现在改成256和-1
你看256是00000..(24个)11111111 ,<<24后是11111111000..00
然后是00000..11111111(第一个相当于没有变嘛),就算改成了int ,符号位是0的嘛,所以应该是的256啊,第二个就是111111..11(32个1)而因为他是int,所以应该是-1的哇,求解
Lactoferrin 2012-02-06
  • 打赏
  • 举报
回复
最新是第二版

double recip(int demon)
{
return 1.0/(double) demon;
}
..
void test(int demon)
{
double r1,r2;
int t1,t2;

r1=recip(demon);//stored in memory
r2=recip(demon);//stored in register
..
}
这个不在书中
wafx5545592 2012-02-06
  • 打赏
  • 举报
回复
不过应该是最新的把,我买的是中文版的!
wafx5545592 2012-02-06
  • 打赏
  • 举报
回复
上面写的修订版,没说什么第几版!
wafx5545592 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lactoferrin 的回复:]
1!(((~x)&y)%%1)
怎么还有%%?


2你算一下256<<24等于几


3浮点数寄存器内容是调用者保存,因此调用第二次recip之前要放进内存
[/Quote]
这个地方写错了,是&&
Lactoferrin 2012-02-06
  • 打赏
  • 举报
回复
你看的第一版?
Lactoferrin 2012-02-05
  • 打赏
  • 举报
回复
1!(((~x)&y)%%1)
怎么还有%%?


2你算一下256<<24等于几


3浮点数寄存器内容是调用者保存,因此调用第二次recip之前要放进内存

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧