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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ⑷嚸V恱 中级黑马   /  2013-8-15 19:51  /  2040 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ⑷嚸V恱 于 2013-8-20 13:51 编辑

童鞋们,在Java中>、>>、>>>三者的区别

点评

哥们,淡定  发表于 2013-8-15 23:50

11 个回复

倒序浏览
>比较运算符
>>右移位运算符
>>>无符号右移运算符
>>与>>>的区别:
>>最高位补什么由原有数据的最高位值而定。 如果最高位是0,右移后,用0补空位。 如果最高位是1,右移后,用1补空位。
>>>无论最高位是什么,右移后,都用0补位。
回复 使用道具 举报
给你两个例子就明白啦:
>大于  :  4>3    true;
>>右移(位运算符):  3>>1 = 1  等同于 3/2=1;
>>>无符号右移;      3>>>1 = 1  等用于  3/2 = 1;
回复 使用道具 举报
给你两个例子就明白啦:
>大于  :  4>3    true;
>>右移(位运算符):  3>>1 = 1  等同于 3/2=1;
>>>无符号右移;      3>>>1 = 1  等用于  3/2 = 1;
回复 使用道具 举报
Jiewin 发表于 2013-8-15 20:12
>比较运算符
>>右移位运算符
>>>无符号右移运算符

能搞一段代码讲解一下吗,定义晓得了,具体是怎么算的 木清楚

下面的代码 这个事怎么解析值得 ,如果传进一个89457 的话 ,>>> 是怎么右移算的 。  >> 这个也不知道是怎么右移算的
  1. public static byte[] int2byteArray(int num) {  
  2.     byte[] result = new byte[4];  
  3.     result[0] = (byte)(num >>> 24);//取最高8位放到0下标  
  4.     result[1] = (byte)(num >>> 16);//取次高8为放到1下标  
  5.     result[2] = (byte)(num >>> 8); //取次低8位放到2下标   
  6.     result[3] = (byte)(num );      //取最低8位放到3下标  
  7.     return result;  
  8. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
py强子 发表于 2013-8-15 20:20
给你两个例子就明白啦:
>大于  :  4>3    true;
>>右移(位运算符):  3>>1 = 1  等同于 3/2=1;

这个右移是怎么个移动   3>>1 = 1  是怎么计算出   等同于 3/2=1;
回复 使用道具 举报
吴光新 黑马帝 2013-8-15 21:59:45
7#
本帖最后由 Jiewin 于 2013-8-15 22:13 编辑

首先要知道89457在内存中是以二进制存储的,就是
00000000 00000001 01011101 01110001

右移24位:00000000│00000001 01011101 01110001
还剩下:  00000000│ 然后在前面补0
就得到:  00000000 00000000 00000000 00000000
结果是:  0

右移16位:00000000 00000001│01011101 01110001
还剩下:  00000000 00000001│ 然后在前面补0
就得到:  00000000 00000000 00000000 00000001 ==>十进制是1
结果是:  1 ==> (byte)1 ==> 1

右移8位: 00000000 00000001 01011101|01110001
还剩下:  00000000 00000001 01011101│ 然后在前面补0
就得到:  00000000 00000000 00000001 01011101 ==>十进制是349
结果是:  349 ==> (byte)349 ==> 93

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

回复 使用道具 举报
>就是大于啊,比较两个操作数或表达式的大小;
>>是右移,如6>>1,即0110右移一位,高位补0,结果为0011,即3;
又如6>>2,即0110右移两位,移一位为0011,移两位为0001,即1;
其实右移1相当于将操作数除以2并舍弃余数的结果。
>>>无符号右移,负数右移时有一位为符号位,要补1,所以-1>>1的结果为-1,但有时你并不想这样,就要用到>>>
回复 使用道具 举报
安阳 中级黑马 2013-8-15 23:27:35
9#
">"为比较运算符,结果都是boolean型,也就是要么是true,要么是false。
">>"与“>>>”都为位运算符:
">>"一个正整数向右移动几位就除以2的几次幂。移动后原高位是0就补0,是1就补1。
">>>"无符号右移无论最高位的符号位是0还是1,用无符号右移后高位符号位都是补0。
回复 使用道具 举报
Jiewin 发表于 2013-8-15 21:59
首先要知道89457在内存中是以二进制存储的,就是
00000000 00000001 01011101 01110001

还差一点,不明白 00000000 00000001 01011101 01110001 右移24  得到 的是 00000000 这个右移动 那 个起点在哪里开始? 怎么个方向移动的,谢谢了。

回复 使用道具 举报
右移右移,不就是向右移吗,就是把右边的24位移走了,多看点视频吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马