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、>>:右移运算符,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、右移运算符>>使指定值的所有位都右移规定的次数。右边移出去的部分扔掉不要,左边空出来的部分用原来的数字填充(这就是所谓的带符号右移)
——比如说5,右移后为00000010。
——你给的例子,假设x=-12,表示为32位int型就是
11111111111111111111111111110100
x>>3即带符号右移3位,结果是
11111111111111111111111111111101,化为十进制等于-3
2、>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
——比如你的例子,byte是8位的,-1表示为byte型是11111111(补码表示法)
b>>>4就是无符号右移4位,即00001111,这样结果就是15。
如果还有困惑,再提
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