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");
求教这个程序的原理,详细一点 展开
if(((1<<j)&i)!=0)
System.out.print("1");
else
System.out.print("0");
求教这个程序的原理,详细一点 展开
3个回答
展开全部
我们知道,在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对应的二进制数
这个程序,应该是为了将一个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次方
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询