Java 二进制位运算

左移(<<)右移(>>)   无符号右移(>>>)

在了解这个之前我们先了解下  计算机中负数 = 正数取反+1

 0000  0000 0000 0000 0000 0000 0000  1010    为10

  1111  1111 1111 1111 1111 1111 1111 0110         为-10

测试代码


测试结果为:

1010十进制为10

左移一位10100十进制为20

右移一位101十进制为5

无符号右移一位101十进制为5

分割线.______________________________________

1111 1111 1111 1111 1111 1111 1111 0110十进制为-10

左移一位11111111111111111111111111101100十进制为-20

右移一位1111 1111 1111 1111 1111 1111 1111 1011十进制为-5

无符号右移一位1111111111111111111111111111011十进制为2147483643

分割线.______________________________________

0111 1111 1111 1111 1111 1111 1111 1111十进制为2147483647

左移一位1111 1111 1111 1111 1111 1111 1111 1110十进制为-2

右移一位0011 1111 1111 1111 1111 1111 1111 1111十进制为1073741823

无符号右移一位111111111111111111111111111111十进制为1073741823

分割线.______________________________________

1000 0000 0000 0000 0000 0000 0000 0000十进制为-2147483648

左移一位0十进制为0

右移一位 1100 0000 0000 0000 0000 0000 0000 0000十进制为-1073741824

无符号右移一位0100 0000 0000 0000 0000 0000 0000 0000十进制为1073741824

分割线.______________________________________

可见 左移一位是所有的位置都向左移动一位 右边补0 

32位字节码中第一位为0第二位为1 和 

第一位为1 第二位为0 的情况下向左移动一位不会得到原值的二倍,其他情况可以得到原值的二倍

右移一位是所有的位置都向右移动一位,左边根据符号位为0或1 来补0或1

右移动一位不论正数和负数都是原值/2

无符号右移一位是是所有的位置都向右移动一位,左边补0

正数和0的时候都是可以得到为原值/2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容