JAVA中的“>>”和“>>>”运算符

JAVA书上说“>>”运算符执行算术或带符号的右移,意味着符号位也将随同数字位一同右移。
例 int enghth = X>>3
根本看不懂得上面一段话是什么意思,请兄弟们给我举个实在点的例子,并且把上面写的例子也顺道解释一下!

然后说说“>>>”它意味着右移零填充,如果需要对短证书和字节执行无符号右移,首先应该屏蔽需要的数据位,然后使用“>>”运算符。
例 byte b = -1;
b=(byte)((b&0xff)>>4);

我日这例子是个啥意思啊,买高手给我解答啊。

1、>>:右移运算符,num >> 1,相当于num除以2。

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

如:

-1在32位二进制中表示为:

11111111 11111111 11111111 11111111

-1>>1:按位右移,符号位不变,仍旧得到
11111111 11111111 11111111 11111111

因此值仍为-1

2、>>>:二进制右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充

如value >>> num中,num指定要移位值value 移动的位数。

扩展资料

“>>”和“>>>”等移位运算符的运算规则:

1、无符号右移,忽略符号位,空位都以0补齐。

value >>>a,a是要移位值value 移动的位数。

无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位  无符号右移运算符>>> 只是对32位和64位的值有意义。

2、右移位运算符>>,若操作的值为正,则在高位插入0;若值为负,则在高位插入1。

右移补零操作符>>>,无论正负,都在高位插入0。

参考资料来源:百度百科——位运算符

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-12-23

1、>>:右移运算符,num >> 1,相当于num除以2。

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

如:-1在32位二进制中表示为:11111111 11111111 11111111 11111111,-1>>1:按位右移,符号位不变,仍旧得到11111111 11111111 11111111 11111111,因此值仍为-1

2、>>>:二进制右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充,如value >>> num中,num指定要移位值value 移动的位数。

扩展资料

“>>”和“>>>”等移位运算符的运算规则:

1、无符号右移,忽略符号位,空位都以0补齐。

value >>>a,a是要移位值value 移动的位数。

无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位  无符号右移运算符>>> 只是对32位和64位的值有意义。

2、右移位运算符>>,若操作的值为正,则在高位插入0;若值为负,则在高位插入1。

右移补零操作符>>>,无论正负,都在高位插入0。

本回答被网友采纳
第2个回答  推荐于2017-09-10
计算机中的数都是二进制表示的,以8位的byte类型表示为例,5可以表示为:00000101(最高位表示符号,0位正,1为负)
无论>>还是>>>都是针对二进制数进行操作的。
1、右移运算符>>使指定值的所有位都右移规定的次数。右边移出去的部分扔掉不要,左边空出来的部分用原来的数字填充(这就是所谓的带符号右移)
——比如说5,右移后为00000010。
——你给的例子,假设x=-12,表示为32位int型就是
11111111111111111111111111110100
x>>3即带符号右移3位,结果是
11111111111111111111111111111101,化为十进制等于-3
2、>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
——比如你的例子,byte是8位的,-1表示为byte型是11111111(补码表示法)
b>>>4就是无符号右移4位,即00001111,这样结果就是15。
如果还有困惑,再提本回答被提问者采纳
第3个回答  2006-10-24
2位楼上的都说全了,但我还想说明一点,在实际编程中JAVA很少用这样的符号。JAVA本身是C派生出来的产物,保留了C的特点,但是实际上很少用作底层的开发(C的强项),可能一个JAVA程序员做了很长一段时间的项目,也没用过这东西,也没必要把精力花在这个上。
第4个回答  2006-10-22
public class TestRightMove {

public static void main(String[] args){
int a = 5;//00000101
int b = a >> 2;
System.out.println("b= "+b);//1
System.out.println( Integer.toBinaryString(a) ) ;

int c = 133;//10000101
int d = c >> 2;
System.out.println("d= "+d);//33
System.out.println( Integer.toBinaryString(c) ) ;

int e = -1;//11111111111111111111111111111111
int f = e >> 2;
System.out.println("f= "+f);//-1
System.out.println( Integer.toBinaryString(e) ) ;

int m = -4;//11111111111111111111111111111100
int n = m >> 2;
System.out.println("n= "+n);//-1
System.out.println( Integer.toBinaryString(m) ) ;
}

}
--------------------------------------------
运行上面的程序也许看的更清楚一些。
我们通常运行的系统是32位系统,java中运行>>符号计算时,其实是对int变量在内存中的存放形式二进制进行移位计算。
比如int a = 5;//00000101,其实在系统中是32位的,前面都是0,所有>>2后就是1,而int e = -1;//11111111111111111111111111111111,首位是1,所有无论怎么移动都是结果都是-1

JAVA中的“>>”和“>>>”运算符
1、>>:右移运算符,num >> 1,相当于num除以2。按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。符号位不变。如:-1在32位二进制中表示为:11111111 11111111 11111111 11111111 -1>>1:按位右移,符号位不变,仍旧得到11111111 11111111 ...

Java 中“>>”和“>>>”有什么区别?
Java中的位运算符:>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。表达式为:result = exp1 >> exp2;result = exp2 >>> exp2;表示把数exp1向右移动exp2位。例如:r...

java中>> 和 >>>的区别,为什么没有<<<
用来将一个数的各二进制位无符号右移若干位,与运算符>>相同,移出的低位被舍弃,但不同的是最高位补0,如a = 00110111,则a>>>2 = 00001101,b=11010011,则b>>>2 = 00110100。二、没有<<<符号没有理由,Java的编写规则就是这样定的,

JAVA里面的位运算符>>,<<,>>>是什么意思,请举个列子具体说明一下?_百 ...
java 中:>>带符号右移 (n>>2 将整型值带符号右移2位 )<<带符号左移 (n<<2 将整型值带符号左移2位 )>>>无符号右移 (n>>>2 将整型值无符号右移2位 ) 在32位系统中任何数左移(右移)32位还是它本身 例如:�6�1a=a<<2将a...

运算符>>和>>>有什么区别
java中测试代码如下:2、>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。其他结构和>>相似。测试代码如下...

java中的>>>和>>>=是什么意思
~ 按位非(NOT)(一元运算)& 按位与(AND)| 按 位或(OR)^ 按位异或(XOR)>> 右移 >>> 右移,左边空出的位以0填 充 运算符 结果 << 左移 &= 按位与赋值 |= 按位或赋值 ^= 按 位异或赋值 >>= 右移赋值 >>>= 右移赋值,左边空出的位以0填充 <<= 左 移赋值 ...

java中>和>>的区别?
>>逻辑运算符,“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位...

Java中的位移运算中的>>(逻辑右移)和>>>(算术右移)的区别?
逻辑右移是将各位依次右移指定位数,然后在左侧补0,算术右移是将各位依次右移指定位数,然后在左侧用原符号位补齐

java "">>>"什么意思 比如 8>>>2
与>> 的意义类似,即将相应二进制数右移,高位补零。 区别在于>> 是有符号右移而>>>是无符号右移(把符号位一起移了),可以使用Integer.toBinaryString(int i)来看01比特,打印出来你就明白了。

java >>=怎么算的
java中>>代表的是向右移位运算,而>>=代表的是向右移位运算时将运算的结果同时赋值给原值,举个例子说明一下:int index = 7;int index2 = index>>1,则表示将7转化为二进制数后向右移动一位,而原值不变,故index = 7 ,index2 = 3;int index3 = index>>=1,则表示将7转化为二进制...

相似回答