黑马程序员技术交流社区

标题: 在Java中>、>>、>>>三者的区别 [打印本页]

作者: ⑷嚸V恱    时间: 2013-8-15 19:51
标题: 在Java中>、>>、>>>三者的区别
本帖最后由 ⑷嚸V恱 于 2013-8-20 13:51 编辑

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


作者: 吴光新    时间: 2013-8-15 20:12
>比较运算符
>>右移位运算符
>>>无符号右移运算符
>>与>>>的区别:
>>最高位补什么由原有数据的最高位值而定。 如果最高位是0,右移后,用0补空位。 如果最高位是1,右移后,用1补空位。
>>>无论最高位是什么,右移后,都用0补位。
作者: py强子    时间: 2013-8-15 20:20
给你两个例子就明白啦:
>大于  :  4>3    true;
>>右移(位运算符):  3>>1 = 1  等同于 3/2=1;
>>>无符号右移;      3>>>1 = 1  等用于  3/2 = 1;
作者: py强子    时间: 2013-8-15 20:20
给你两个例子就明白啦:
>大于  :  4>3    true;
>>右移(位运算符):  3>>1 = 1  等同于 3/2=1;
>>>无符号右移;      3>>>1 = 1  等用于  3/2 = 1;
作者: ⑷嚸V恱    时间: 2013-8-15 21:25
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. }
复制代码

作者: ⑷嚸V恱    时间: 2013-8-15 21:27
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
本帖最后由 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


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

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


作者: 吴光新    时间: 2013-8-16 08:56
右移右移,不就是向右移吗,就是把右边的24位移走了,多看点视频吧




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