我有一个长整型数1158278617000,需要取其低16位数值。
使用方法:
long l=Long.valueOf("1158146840000");
int lowInt=(int)l;
我要取的低16位,也就是10000110110100110111011100101010111000000中的
10100110111011100101010111000000,
低16位数从理论上是2800637376
但是得出的结果是个负数,按说数值转换,应该自动截位,这里却是在高16位上自动补1,使其成为负数。
请问如何将高16位的1去掉?如何获得低16位整型数值
使用方法:
long l=Long.valueOf("1158146840000");
int lowInt=(int)l;
我要取的低16位,也就是10000110110100110111011100101010111000000中的
10100110111011100101010111000000,
低16位数从理论上是2800637376
但是得出的结果是个负数,按说数值转换,应该自动截位,这里却是在高16位上自动补1,使其成为负数。
请问如何将高16位的1去掉?如何获得低16位整型数值
解决方案 »
- 不用括号里写类名方式(User)o怎么将一个父类转为子类,看这两个方法。。。
- 面试挺难的(多选题)
- 几个基础问题,帮忙回答下
- dom4j删除节点问题!
- 如何逐行读取txt文件中的字符串?
- java初学者,请各位多多帮忙!
- 在2000下运行的好好的程序为什么到SOLARIS下就会出错呢?希望大家援手!多提意见。
- 如果我想比较一个字符串型变量与一个字符串变量?
- 兄弟姐妹们,过年前再问大家一个问题
- java.lang.UnsupportedClassVersionError: org/apache/catalina/ant/ReloadTask (Unsu
- 数据显示
- 如何使用Java开源Swing外观!!急急!!
int lowInt;
if(l>Integer.MAX_VALUE){
lowInt=Integer.MAX_VALUE;
}else{
lowInt=(int)l;
}
to freewilling() :位移方式,那么应该左位移33位(去掉高位),但还是长整型数呀,并不是我所想的整型
TO lip009(深蓝忧郁) :这位仁兄给出了做法,但是有错误
其中: lowInt=Integer.MAX_VALUE;//这句话什么意思。
to harston(顽石) :我还真不知道如何强制以2为权重是什么意思。能否告知
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));
long l2 = l & 0xFFFF;
int n = (int)l2;
这样取,但是结果并不是lz说的2800637376
而应是21952
16位int的范围是-32768 ~ 32767