编程中的移位运算符简单解释


1.<<左移 (又叫算术左移),数字的二进制表示中符号位不进行移位。

例如 10<<2

10的二进制表示是 (机器补码表示,不会自行百度)0,0000000...00001010(共三十二位,假设机器是32位机器,64位大同小异)

左移2位之后是0,0000000...0000101000 ,换算成十进制就是40.   因为【(10*2)*2 = 40】。

例如 (-10)<<2

-10的二进制表示是 1,1111111...11110110(共三十二位,假设机器是32位机器,64位大同小异)

左移2位之后变成1,1111111...1111011000(补码左移规则请自行百度), 换算成十进制就是-40,所以(-10)<<2 = -40

2.<<<符号左移(又叫逻辑移位),即把数字的二进制表示中符号位不用区别对待。

整数的符号左移和左移是等价的,因为补码左移时右侧都是补0


3.右移>>(又叫算术右移),数字的二进制表示中符号位不进行移位。

例如 10>>2

10的二进制表示是 (机器补码表示,不会自行百度)0,0000000...00001010(共三十二位,假设机器是32位机器,64位大同小异)

右移2位之后是0,0000000...00000010 ,换算成十进制就是2.   因为【(10/2)/2 = 2】。

例如 (-10)>>2

-10的二进制表示是 1,1111111...11110110(共三十二位,假设机器是32位机器,64位大同小异)

右移2位之后变成1,1111111...11111101(补码右移规则请自行百度), 换算成十进制就是-3,所以(-10)<<2 = -3(这也是为什么 -5/2 = -3 的原因)

4.符号右移>>>(又叫逻辑移位)即把数字的二进制表示中符号位不用区别对待。

例如 10>>>2 (正整数的符号右移同算术右移)

例如 -10>>>2

-10的二进制表示是 1,1111111...11110110(共三十二位,假设机器是32位机器,64位大同小异)

逻辑右移两位之后是0,011111...11111101,换算成十进制是1073741821 所以(-10)<<<2 = 1073741821

你可能感兴趣的:(Java,编程)