我有一个长整型数1158278617000,需要取其低16位数值。
使用方法:
long l=Long.valueOf("1158146840000");
int lowInt=(int)l;
我要取的低16位,也就是10000110110100110111011100101010111000000中的
10100110111011100101010111000000,
低16位数从理论上是2800637376
但是得出的结果是个负数,按说数值转换,应该自动截位,这里却是在高16位上自动补1,使其成为负数。
请问如何将高16位的1去掉?如何获得低16位整型数值

解决方案 »

  1.   

    1158278617000需要几个字节?long 是几个字节
      

  2.   

    先把long转成String,然后截取后16位(如果不足左边补0),然后用Integer.parseInt(String)
      

  3.   

    java里没有无符号数,也就是说整型数的最大值就是2147483647,所以楼主那个2800637376的理论值实际上是long型.如果不要最高位的1,可以通过位移操作去掉,得到的结果是653153728
      

  4.   

    long l=Long.valueOf("1158146840000");
    int lowInt;
    if(l>Integer.MAX_VALUE){
       lowInt=Integer.MAX_VALUE;
    }else{
       lowInt=(int)l;
    }
      

  5.   

    to anchor1(聪头) :你的做法有问题,long转成String是需要什么格式的呀,十进制还是二进制。而后面步骤需要截位则需要二进制,当Integer.parseInt(String)只能转换十进制的。
    to freewilling() :位移方式,那么应该左位移33位(去掉高位),但还是长整型数呀,并不是我所想的整型
    TO lip009(深蓝忧郁) :这位仁兄给出了做法,但是有错误
             其中: lowInt=Integer.MAX_VALUE;//这句话什么意思。
    to harston(顽石) :我还真不知道如何强制以2为权重是什么意思。能否告知
      

  6.   

    long l = Long.parseLong("1158146840000");
        int lowInt;
        if (l > Integer.MAX_VALUE) {
          lowInt = Integer.MAX_VALUE;
        }
        else {
          lowInt = (int) l;
        }
        System.out.println(lowInt);
    //===================================================
        String s=Long.toBinaryString(l);
        System.out.println(s);
        s=s.substring(s.length()-32,s.length());
        System.out.println(s);
    //    lowInt=Integer.parseInt(s,2);//这里s,也就是10100110111011100101010111000000超出int类型,所以会报错,只能用long接收
        System.out.println(Long.parseLong(s,2));
      

  7.   

    long l = 1158146840000L;
    long l2 = l & 0xFFFF;
    int n = (int)l2;
    这样取,但是结果并不是lz说的2800637376
    而应是21952
    16位int的范围是-32768 ~ 32767