二进制移位运算符

来源:互联网 发布:linux 安装xz工具 编辑:程序博客网 时间:2024/03/29 15:08

移位运算符
左移:<<
带符号右移:>>
无符号:>>>

拿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了!

原创粉丝点击