免费注册 查看新帖 |

Chinaunix

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

一个二进制移位产生的疑难问题…… [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-23 10:25 |显示全部楼层 |倒序浏览
WORD src = 65535;
结果trace发现src << 16 = -65536,为什么会等于这么多?-65536用二进制表示应该是多少呢?
我怎么感觉src是16位的,左移16位后,应该为0?

另外计算机中表示负数是用补码还是反码表示的?

论坛徽章:
0
2 [报告]
发表于 2004-09-23 11:24 |显示全部楼层

一个二进制移位产生的疑难问题……

我刚看了一篇文章,里面说所有原码、反码、补码的转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。
---------------------------------------------------------------------
可是我就更不懂了
WORD 是VC里面定义的unsigned short,就是最高位也是数字位,不是符号位。
那为何65535 << 16也就是1111111111111111左移16位后,得到的值确实-65536,也就是说其一无符号位移位运算后,产生的值是有符号位;
其二,-65536是一个什么数?因为16位的二进制数,如果是有符号位的,无论是原码还是补码,这个数都已经超过范围。
唯一只有一种可能,就是16位的数,左移16位,值实际已经扩展到32位,扩展到32位111111111111111100000000000000000
扩展出来的数是什么码?如果是补码,取反+1的结果倒是和-65536的值相符。
那么也就是说,计算机中的数据用的还是补码?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP