黑马程序员技术交流社区

标题: 标题已改 请版主删除 [打印本页]

作者: 李栋    时间: 2011-12-2 17:14
标题: 标题已改 请版主删除
本帖最后由 李栋 于 2012-12-25 20:56 编辑

请删除        
作者: 武超    时间: 2011-12-2 17:43
原来的左边第一位去掉,第二位补上,再将这新的第一位确定为1,右边补0.
作者: 李栋    时间: 2011-12-2 17:47
武超 发表于 2011-12-2 17:43
原来的左边第一位去掉,第二位补上,再将这新的第一位确定为1,右边补0.

武超同学,我听不懂啊:L
作者: 李栋    时间: 2011-12-2 17:52
我这里也没有说该怎么移动啊,您怎么已经有第几位补什么的答案了呀?{:soso_e132:}
作者: 郝亚平    时间: 2011-12-2 18:18
本帖最后由 郝亚平 于 2011-12-2 18:20 编辑

代码例子:

class Test{
        public static void main(String args[]){
                System.out.println((-6)>>3);//-1
                System.out.println((6)>>3);//0

                System.out.println((-6)<<3);//-48
                System.out.println((6)<<3);//48
        }
}

分析:
    看前两行输出语句:对于向右移动的情况,无论是正数还是负数,都是高位方向空出位来,高位方向决定了数据的正负,所以,这里,这个补什么,必须要看是正数还是负数,也就是看高位起始位是0还是1,是什么就补什么。总结下:高位方向空位补0还是补1,要看移动前原始数据的高位是0还是1,即正负性。

    看后两行输出语句:对于向左移动的情况,无论是正数还是负数,都是低位方向空出来位来,这个地方不决定数据的正负,所以,都是补充为0.即为:低位方向空位永远补充0.
遵循此原则,应该就不会出错了。













作者: 郝亚平    时间: 2011-12-2 18:24
郝亚平 发表于 2011-12-2 18:18
代码例子:

class Test{

呵呵。不客气。加油努力。一起进步~。:handshake
作者: 武超    时间: 2011-12-2 20:42
李栋 发表于 2011-12-2 17:52
我这里也没有说该怎么移动啊,您怎么已经有第几位补什么的答案了呀? ...

你不是说负数向左移动么
作者: 黑马巩伟伟    时间: 2011-12-13 22:13
如果原码的话, 符号位不变  移动位补0 如10010->10001

作者: 付旭    时间: 2011-12-14 16:42
  什么是高位和地位呢?   亚平哥

作者: 许邦存    时间: 2011-12-14 17:56
左移的话不管是否是正负数,都在后面补零,右移根据是正数则补0,为负数则补1
作者: 许邦存    时间: 2011-12-14 17:58
右移动是在高位补1或0,就最右边。
作者: 郝亚平    时间: 2011-12-14 18:48
付旭 发表于 2011-12-14 16:42
什么是高位和地位呢?   亚平哥

没思考过,这个差不多就是个习惯称谓。描述二进制数据和十六进制数据经常用到啦。
不管是看待二进制,还是十六进制,左边相对于右边都是高位,右边相对于左边都是低位。

客气。:P
作者: 付旭    时间: 2011-12-14 19:30
郝亚平 发表于 2011-12-14 18:48
没思考过,这个差不多就是个习惯称谓。描述二进制数据和十六进制数据经常用到啦。
不管是看待二进制,还 ...

      ok   明白....  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2