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

解决方案 »

  1.   

    请各位帮忙分析下,1000对应的10进制数为8,右移4位应该得1,可为什么右移后为62呢注
    程序的目的是想看看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.
      

  2.   

    System.out.println("2进制表示为:"+i+"右移4位为:"+(1000>>4));
    这里若将1000>>4改为i>>4(i = 8),变成了0000,自然就十进制的0了。
      

  3.   

    +"右移4位为:"+(1000>>4)); 
    你这个是1K向又移4位啊……1K的二进制1111101000移位过后就变成了111110啊……也就是十进制的62……
      

  4.   

    1000 是十进制数,java里面没有二进制数的直接表示形式。你可以用0x 进行16进制的测试
      

  5.   

    1000>>4写成这种形式 是十进制的1000  
      

  6.   

    public class YeWei
    {
        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;
        }
    }看看这行吗 我没有试过