java中的移位问题 程序如下

for(intj=31;j>=0;j--)if(((1<<j)&i)!=0)System.out.print("1");elseSystem.out.print("0")... for(int j=31;j>=0;j--)
if(((1<<j)&i)!=0)
System.out.print("1");
else
System.out.print("0");
求教这个程序的原理,详细一点
展开
 我来答
励丹寒0iQ
2012-02-18 · TA获得超过369个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:269万
展开全部
我们知道,在java中,int是占4个字节的,也就是32位。
这个程序,应该是为了将一个int类型转换成32位2进制数。
原理:
1. <<:左移运算符,在没有数字溢出的情况下,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
2. &:位运算符,当两边操作数的位同时为1时,结果为1,否则为0。如111 & 101 = 101。
切入正题:
1. 为了取得32位完整的二进制数,需要循环32次,1<<31即2的31次方,表示最高位为1,其余31位均为0的二进制数;1<<30即2的30次方,表示第二位为1,其余31位均为0的二进制数;以此类推。
2. 程序从高位开始转换int类型,我们想要截取二进制数的特定某位时,我们需要用一个此位为1,其余位均为0的二进制数来做&运算,例如,我们想截取15的最高位,我们只需使用最高位为1的32位二进制数与15做&运算即可。因为假设假设某位为1,1 & 1 = 1,假设某位为0,0 & 1 = 0,均能得到原来的数。而1或0与0相与均为0.

总之,程序是从高位到低位依次一位一位截取int对应二进制数,输出的结果便是int对应的二进制数
追问
1<<31表示左移31位?那1表示什么?
追答
int 1
到了cpu里面,数据都是以2进制计算的,1 << 31即000.....1(32位)左移31位,变成10000..000(32位)- 转换成10进制是2的31次方
百度网友baf6e90
2012-02-18
知道答主
回答量:49
采纳率:0%
帮助的人:17.1万
展开全部
你要化成二进制来求解的。 比如 2<<3 ; 2的二进制为 00000010;<<就是向左移动三位,变成00001000就是变成了8;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2012-02-18 · TA获得超过890个赞
知道小有建树答主
回答量:318
采纳率:0%
帮助的人:429万
展开全部
你的i值未声名,没办法给你解释。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式