免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1380 | 回复: 4
打印 上一主题 下一主题

Unix 环境高级编程问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-24 09:54 |只看该作者 |倒序浏览
问大家一个问题,第十章的程序10-9的移位操作符是否应为>;>; (右移操作符) 而不是书上的 << (左移操作符)!

论坛徽章:
0
2 [报告]
发表于 2005-10-24 10:11 |只看该作者

Unix 环境高级编程问题!

书没错。为什么这么问呢?

论坛徽章:
0
3 [报告]
发表于 2005-10-24 10:26 |只看该作者

Unix 环境高级编程问题!

我是这样想的:
    譬如sigaddset函数,它是往信号集中添加一个信号,添加的信号位应该置一.
所以书上实这样写的: *set |= 1<<(signo - 1);      /* turn bit on */
上面的表达式的意思是,先把1左移signo-1位,再和*set集相或.但是1左移signo-1位以后将变成了零,所以我认为这里应该是右移>;>;而不是左移<<
不知大家看法如何!!!

论坛徽章:
0
4 [报告]
发表于 2005-10-24 10:34 |只看该作者

Unix 环境高级编程问题!

1这个数,只要右移,不管移几bit,必定变成0;只有左移x位,才会在从右边开始数的第x bit置1,其它bit都是0.

仔细想想,自己是不是一时转不过弯来了?

论坛徽章:
0
5 [报告]
发表于 2005-10-24 10:42 |只看该作者

Unix 环境高级编程问题!

终于明白谢谢版主:
1的二进制表示为(假设int为16位的):0000000000000001
所以必需左移而不是右移!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP