首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java右移每32位(64位)循环

Java右移每32位(64位)循环

作者头像
sickworm
发布2019-02-27 16:55:52
发布2019-02-27 16:55:52
1.7K0
举报
文章被收录于专栏:sickwormsickworm

long a = 33; for (int i = 0; i < 64; i++) { System.out.println(i + " " + (a >> i)); }

12345

long a = 33;        for (int i = 0; i < 64; i++) {            System.out.println(i + " " + (a >> i));        }

结果:

0 33 1 16 2 8 3 4 4 2 5 1 6 0 7 0 ... 62 0 63 0

123456789101112

0 331 162 83 44 25 16 07 0...62 063 0

而如果是int, short, byte:

int a = 33; // short, byte 也一样 for (int i = 0; i < 64; i++) { // i 为 short, byte也一样 System.out.println(i + " " + (a >> i)); }

12345

int a = 33; // short, byte 也一样        for (int i = 0; i < 64; i++) { // i 为 short, byte也一样            System.out.println(i + " " + (a >> i));        }

结果是:

0 33 1 16 2 8 3 4 4 2 5 1 6 0 7 0 ... 30 0 31 0 32 33 33 16 34 8 35 4 36 2 37 1 38 0 39 0 40 0 41 0 ... 62 0 63 0

12345678910111213141516171819202122232425

0 331 162 83 44 25 16 07 0...30 031 032 3333 1634 835 436 237 138 039 040 041 0...62 063 0

  • 为何出现这样的情况?
  • 猜测是机器码只会截取低8bit/4bit作为移位量。(需反编译,待续)
  • 为何int short boolean和long不一样?
  • Java运算时默认将操作数扩展为int(long位数大于int所以不会变化),所以int,short,boolean结果都是32位一次循环。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档