长整型转整型

asper975 2006-09-15 10:04:30
我有一个长整型数1158278617000,需要取其低16位数值。
使用方法:
long l=Long.valueOf("1158146840000");
int lowInt=(int)l;
我要取的低16位,也就是10000110110100110111011100101010111000000中的
10100110111011100101010111000000,
低16位数从理论上是2800637376
但是得出的结果是个负数,按说数值转换,应该自动截位,这里却是在高16位上自动补1,使其成为负数。
请问如何将高16位的1去掉?如何获得低16位整型数值
...全文
559 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lip009 2006-09-15
  • 打赏
  • 举报
回复
long l=Long.valueOf("1158146840000");
int lowInt;
if(l>Integer.MAX_VALUE){
lowInt=Integer.MAX_VALUE;
}else{
lowInt=(int)l;
}
freewilling 2006-09-15
  • 打赏
  • 举报
回复
java里没有无符号数,也就是说整型数的最大值就是2147483647,所以楼主那个2800637376的理论值实际上是long型.如果不要最高位的1,可以通过位移操作去掉,得到的结果是653153728
聪头 2006-09-15
  • 打赏
  • 举报
回复
先把long转成String,然后截取后16位(如果不足左边补0),然后用Integer.parseInt(String)
mu_yang 2006-09-15
  • 打赏
  • 举报
回复
1158278617000需要几个字节?long 是几个字节
polarman 2006-09-15
  • 打赏
  • 举报
回复
long l = 1158146840000L;
long l2 = l & 0xFFFF;
int n = (int)l2;
这样取,但是结果并不是lz说的2800637376
而应是21952
16位int的范围是-32768 ~ 32767
lip009 2006-09-15
  • 打赏
  • 举报
回复
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));
asper975 2006-09-15
  • 打赏
  • 举报
回复
to anchor1(聪头) :你的做法有问题,long转成String是需要什么格式的呀,十进制还是二进制。而后面步骤需要截位则需要二进制,当Integer.parseInt(String)只能转换十进制的。
to freewilling() :位移方式,那么应该左位移33位(去掉高位),但还是长整型数呀,并不是我所想的整型
TO lip009(深蓝忧郁) :这位仁兄给出了做法,但是有错误
其中: lowInt=Integer.MAX_VALUE;//这句话什么意思。
to harston(顽石) :我还真不知道如何强制以2为权重是什么意思。能否告知
harston 2006-09-15
  • 打赏
  • 举报
回复
先转化成2进制的字符串,然后强制以2为权重的数值

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧