A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM汪磊   /  2013-2-28 12:55  /  3639 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个吧,首先要明白这个原码和算术移位以及逻辑移位。
x>>>32,是指x右移32位。这个是指不带符号的算术移位,也就是不管左移还是右移,都补零。而逻辑移位呢,是带符号的移位,此处不详细解释。
x=6,计算机里存储是补码形式存储,而正数的补码和原码是一样的,所以算术移位后还是6.
希望你能理解。。。。。。

点评

前两行说的还挺对的,怎么后面又有问题了呢,你的答案老有问题,我可要不给分了。 十分以下,认真回答问题,鼓励一下。  发表于 2013-3-1 20:02

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
刘凯 发表于 2013-2-28 14:35
二楼 有点不是正确吧  这么说来x=6 >>>1  后也等于6喽?   可以验证下  等3 的 ...

右移一位少个0,最后两位11,是3啊。我不是在说右移32位怎么移的么。。。看来还是没说明白,表达能力有点差。。。:dizzy:
回复 使用道具 举报
好吧,我应该这么说,对于这个6,就这么理解,换成32位的二进制,往右移位,左边补零,右边去掉,然后如果字长是32位的,小于32位就移,大于32就取模。怎么感觉我还是没说明白似的。。。。
回复 使用道具 举报
刘凯 发表于 2013-2-28 14:51
骚年 好好学习  天天向上 啊要

要要  切克闹~~~咱俩这不算刷回复吧。。。。
回复 使用道具 举报
袁术森 发表于 2013-2-28 15:26
恩,正解。但我对byte类型尝试的时候有点疑惑了,http://msdn.microsoft.com/zh-cn/library/x0ax6803(VS. ...

例子里的字长是8位,15是0000 1111,右移10位相当于右移两位。你计算机字长32位,15是0000 0000 0000 0000 0000 0000 0000 1111,右移十位之后是0000 0000 0000 0000 0000 0000 0000 0000,所以是0.
回复 使用道具 举报
孙传磊 发表于 2013-2-28 15:33
>>> 操作符,无符号算数右移,左面补0
由于无符号右移运算符>>>只是对32位和64位的值有意义。因为要记住, ...

只对32位或64位有意义?如果我机器字长,存储字长都是8位的,对8位的也可以做取模吧。这个应该跟字长有关。求解释~~
回复 使用道具 举报
孙传磊 发表于 2013-2-28 19:35
java里就是这样规定的,下面的例子说明了这一点:
public class ByteShift {
        public static void main(S ...

关于当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型,这个确实是java规定。但是移位不是只能是32位或者64位吧?在早期的计算机,存储字长是8位或者16位的,这些移位取模时就应该是字长的值,即8或16,只对32或64的情况有意义的话应该是在32位字长的计算机,也就是现在大多数的计算机。
回复 使用道具 举报
陈丽莉 发表于 2013-3-1 20:02
负数才是以补码形式存放的  - -||

斑竹大人,正数的补码和原码是一样的,这个,可不可以认为正数和负数都是以补码形式存储的??既然一样,这样理解好记啊,嘿嘿。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马