移位运算符
左移:<<
带符号右移:>>
无符号:>>>
拿17来演示一下
正数的00010001
负数的11101111这个怎么来的?就是补码,最高位1就是负 后面那些取反+1就是补码!
左移<<
正数00|01000100,扔掉前面两个补上00
负数11|10111100,也是一样!!
带符号右移>>
正数00000100|01,扔掉右边两个补上00,因为带符号右移的,所以正的符号是0
负数11111011|11,扔掉右边两个补上11,负的符号是1
无符号右移>>>
正数00000100|01,扔掉后面两个,补上00
负数00111011|11,扔掉后面两个,补上00,因为无符号右移,所以补上0
例子=========================================================================
class yiwei
{
public static void main(string [] args)
int i=0xffffffff;// 十进制是-1,二进制是11111111,16进制就是0xffffffff
int c=i<<2;
system.out.println(i);
system.out.println(c);
}
打印出来的是-1和-4
运算一下,-1二进制是11111111
向左移就是 11|11111100 =-4
转正就是
111111100-1=111111011
取反 000000100
所以等于4!
如果i>>带符号右移
那么结果还是-1,因为11111111右移还是11111111|11
如果>>>不带符号右移!那么就是00111111|11
转16就是0x3F 转十进制就是63,无论什么二进制无符号右移,都是正的,除了0
得出一个结论 向右移一位,那么就等于除于2
向左移一位就等于乘于2…………
那么移两位就是4了!