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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HeiMaYSL 中级黑马   /  2012-4-24 15:17  /  1554 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a>>1 是不是等于 a/2 吗?a>>1 是什么运算?是怎么得来的?不解啊?那么<<又是什么呢?

8 个回复

倒序浏览
是的!在数据以2进制存放时候,右移运算相当于除以2.

比如0000  0000  0000  1010
        000  0000  0000  0101   0

这个就是右移运算的小例子。
<<是左移运算。

位移运算一般在进制转换时候,能够方便运算和减少运算次数,达到优化!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
那是位移运算符
>>(右移)
<<(左移)
>>>(右移,右边空出的位以0填充)
a>>1就是a的内容右移一位
回复 使用道具 举报
二个大于或小于号在JAVA里是位移运算符
>>(右移)
<<(左移)
a右移一位
回复 使用道具 举报
本帖最后由 杨国祯 于 2012-4-24 16:09 编辑

这是位运算符,也成为移位运算,也就是 把数字转换成二进制后,进行移位运算,
a>>1就是整体向右移动一位
这里分两种  <<   >> 两种符号
你提到的是右移运算符 >>

1)右移的规则:符号位不变(正负不变),向右边移出x位,同时最左边补上符号位

2)运算规则:
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1

3)总结
右移一位相当于除2,右移n位相当于除以2的n次方。 给你举一个特殊的例子
25 >> 2(25为int型)
A、把25转换为二进制:这个会吧00000000 00000000 00000000 00011001
B、把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。00000000 00000000 00000000 00000110
C、转换为十进制: 6

这个很清晰了吧,左移类似但不一样!以后有时间再写!





评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
你其实记住一个结论就可以了,

>>就是除以2的移动的位数次幂,除不尽的取整。
<<就是乘以2的移动的位数次幂
回复 使用道具 举报
liqian 中级黑马 2012-4-24 15:35:40
7#
>>是右移运算,它的通用格式如下所示:value >> num 。num 指定要移位值value 移动的位数。也就是,右移运算符>>使指定值的所有位都右移num位。将值每右移一次,就相当于将该值除以2并且舍弃了余数。你可以利用这个特点将一个整数进行快速的2的除法。当然,你一定要确保你不会将该数原有的任何一位移出。
<<是左移运算,它的通用格式如下所示:value << num。num 指定要移位值value 移动的位数。
java中的基本移位运算符:
1.位逻辑运算符:位逻辑运算符有“与”(AND)、“或”(OR)、“异或(XOR )”、“非(NOT)”,分别用“&”、“|”、“^”、“~”表示。
2.左移运算<<,每左移一个位,高阶位都被移出(并且丢弃),并用0填充右边;
  右移运算>>,注意>>运算符总是自动地用它的先前最高位的内容补它的最高位,这样做保留了原值的符号;
  无符号右移运算符>>>,它总是在左边补0。

回复 使用道具 举报
李斌 中级黑马 2012-4-24 15:37:54
8#
这是我的学习总结 与你分享
位运算符包括>>、>>>(右移)、<<(左移)
<<:其实是乘以2的移动的位数次幂;
>>:就是乘以2的移动的位数次幂;
注意事项
>>:最高位补什么由原数据最高位值定,如果最高位0则补0,若为1则补1;
>>>:无论最高位为1或0,都是拿0补
例子
6>>2
0000-0000 0000-0000 0000-0000 0000-0110   6的二进制右移动之前
000000-0000 0000-0000 0000-0000 0000-0110   6的二进制右移动之后 注意前面补2个0

得到0000-0000 0000-0000 0000-0000 0000-0001 该值等于1
所以6>>2位 等于1
同理6>>1 =3
楼主多自己画一下 就掌握了
{:soso_e130:}


回复 使用道具 举报
李斌 中级黑马 2012-4-24 15:40:45
9#
上面打错了 不好意思
<<:其实是乘以2的移动的位数次幂;如 6<<1=6*2
>>:就是除以2的移动的位数次幂:6>>1=6/2;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马