移位运算符解析
Posted 秋秋秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移位运算符解析相关的知识,希望对你有一定的参考价值。
移位运算符分为左移(<<)、右移(>>)、无符号位移(>>>)。
<<:空位补0,最高位丢弃。相当于数据乘以2的n次幂。
正数的左移:
int a=3<<2; System.out.println(a);
3的原码:11
原码 00000000 00000000 00000000 00000011
反码 00000000 00000000 00000000 00000011
补码 00000000 00000000 00000000 00000011
左移(00)000000 00000000 00000000 0000001100(补码)
正数的原反补都相同,所以结果为12。
负数的左移:
int a=-3<<2; System.out.println(a);
-3的原码
原码 10000000 00000000 00000000 00000011
反码 11111111 11111111 11111111 11111100
补码 11111111 11111111 11111111 11111101
左移 (11)11111111 11111111 11111111 11110100(补码)
反码 11111111 11111111 11111111 11110011
原码 10000000 00000000 00000000 00001100(-12)
>>:最高位是0,左边补齐0;最高位是1,左边补齐1。相当于数据除以2的n次幂。
原理与左移相同。
>>>:无论最高位是0还是1,左边补齐0。
正数>>>的结果与>>相同,重点看负数。
int a=-12>>>2; System.out.println(a);
-12的原码
原码 10000000 00000000 00000000 00001100
反码 11111111 11111111 11111111 11110011
补码 11111111 11111111 11111111 11110100
>>> 0011111111 11111111 11111111 111101(00)(补码)
变成了正数,原反补都相同,通过计算得?1073741821?。
以上是关于移位运算符解析的主要内容,如果未能解决你的问题,请参考以下文章