左移动操作符

int a1 = 12<<1;//24

int a2 = -12<<2;//-48

int a3 = 128<<2;//512

int a4 = 129<<2;//516

舍弃二进制数开头一位.在二进制数尾部增加一位0.

a*2^b<===a<<b

数字a左移b位结果为 a*2的b次方

一 12的二进制形式

1 >12

0000 0000 0000 1100

0000 0000 0001 1000

----------------------等价于10进制24

-12的二进制

1>12二进制

0000 0000 0000 1100

2>取反

1111 1111 1111 0011

3>加1

1111 1111 1111 0100

3>左移动两位

1111 1111 1101 0000

4>

变为十进制的形式

4.1>-1

1111 1111 1100 1111

4.2 >取反

0000 0000 0011 0000

48

由于是负数故为-48

--------------------------

int a3 = 128<<2;

1>128二进制

0000 0000 1000 0000

2>左移动两位 在尾部补两位0

0000 0000 0000 0000

十进制数为512

四  int a4 = 129<<2;//516

0000 0000 1000 0001

129的十进制

左移两位

0000 0010 0000 0100

十进制为516

原文地址:https://www.cnblogs.com/cici-new/p/4298717.html