• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
﹏℡幸福?
博客园    首页    新随笔    联系   管理    订阅  订阅

位运算有符号右移和无符号右移

<< :左移运算符,n<<1相当于 n*2
>> :右移运算符,n>>1相等于n/2
 >>>:无符号右移,忽略
int a=-1;
-1的32进制位:
源码 :     0000 0000 0000 0000 0000 0000 0000 0001
反码 :     1111 1111 1111 1111 1111 1111 1111 1110
补码 :     1111 1111 1111 1111 1111 1111 1111 1111 (在反码基础上+1)
a<<2:    1111 1111 1111 1111 1111 1111 1111 1100
a>>2:    1111 1111 1111 1111 1111 1111 1111 1111  (右移两位,左边高位再补两个1,所以看着没什么变化)
a>>>2:  0011 1111 1111 1111 1111 1111 1111 1111  (无符号右移跟上个比起来就是高位不补1)
            
 
上面-1 >>2看着没什么变化可以换成-5 试试:
int  a=-5;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a>>2));
System.out.println(a>>2);
11111111111111111111111111111011
11111111111111111111111111111110
-2
-------------------------------------------------------
int a=-5;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a>>>2));
System.out.println(a>>>2);
11111111111111111111111111111011
111111111111111111111111111110
1073741822
posted @ 2017-02-27 09:35  ﹏℡幸福?  阅读(3996)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3