public class yiwei {
public static void main(String[] args){
int x=8;
String p=Integer.toBinaryString(x);//转为2进制字符串类型
int i=Integer.parseInt(p, 2);//根据基数类型,转为对应的10进制整数
System.out.println("2进制表示为:"+i+"右移4位为:"+(1000>>4));
}
}程序运行结果为 :
2进制表示为:8
右移4位为:62请各位帮忙分析下,1000对应的10进制数为8,右移4位应该得1,可为什么右移后为62呢
注
程序的目的是想看看x/8 是否等于x>>4位,不知道右移之前是否必须先将10进制转为2进制?程序中是转了的。不转的话,输出结果是:
2进制表示为:8
右移4位为:0
程序的目的是想看看x/8 是否等于x>>4位,不知道右移之前是否必须先将10进制转为2进制?程序中是转了的。不转的话,输出结果是:
2进制表示为:8
右移4位为:0 建议楼主再仔细复习一下java中的移位运算语法。你在java代码中中所写的整形数只能是十进制形式的,也可以用0xffff之类的十六进制表示等,但在编译运行的运行的时候都将以二进制的形式进行运算的。所以你这里写的1000指的是int类型的,在运行移位运算时,JVM先将其轮换为二进制形式 0011 1110 1000 ,右移4位之后变为:0000 0011 1110 当然就是进进制的62了啊!java中的右移运算好像只对无符号数,右移高位全部补0.
这里若将1000>>4改为i>>4(i = 8),变成了0000,自然就十进制的0了。
你这个是1K向又移4位啊……1K的二进制1111101000移位过后就变成了111110啊……也就是十进制的62……
{
public static void main(String str[])
{
int right=0;
int left=0;
int data=1234;
int datar,datal;
datar=1234;
datal=1234;
while((data/8)!=datar)
{
right++;
datar=Right(data);
}
while((data*8)!=datal)
{
left++;
datal=Left(data);
}
System.out.println("右移几位:"+right+" 左移几位:"+left);
}
//右移1位函数
public int Right(int Data)
{
return Data>>1;
}
//左移1位函数
public int Left(int Data)
{
return Data<<1;
}
}看看这行吗 我没有试过