long型转换为int越界以后再转回long的问题 一个long类型的数:3232235879 转换为int型以后变成了-1062731417我现在想把-1062731417 再转换回来请问该怎么做呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 long类型的转成了int, 本来就会使数据失真,没有可逆性。 这是因为你转换成int类型以后,数字的最高位是1的缘故,你转换回来要变成正数也很简单,按照取反加1的原则即可。 不可能转换回去的long是64位的,转成int的时候直接把高32位去掉了,怎么恢复!不可能 你可以用>>>无符号向右位移一位,然后再转换成long再用<<符号左位移一位,因为向右位移一位会丢失一位,因此你要判断数字是否为奇数,如果是奇数,那么最右一位为1,那么你转换完成以后要+1,如果是偶数,最右一位是0,那么左位移以后就不用再做处理了。 位运算可以程序设计的基础,有空多看看,虽然不常用到,但是能解决很多棘手的问题。下面是代码。 long i=3232235879l; //这里转换成int类型 int j=(int)i; System.out.println(j);//这里输出的是-1062731417 //这里你用右位移运算,向右位移一位 long temp=j>>>1; temp<<=1; //判断是否为奇数,奇数加1 if(j%2!=0){ temp+=1; } System.out.println(temp); Long.valueOf(Integer.toBinaryString(-1062731417),2);不知是不是都可逆,不过这个转回去了。 悲催的nextLine(); 进来看看……如何解决…… JSP查询问题!!!!!!!!!!!! 弟兄们帮帮忙 还是字符截取的问题 急啊!!关于日期格式化的问题 请问如何在java里实现随机生成数字? 求救!我现在要做Windows服务注册和控制方面的任务,请各位大侠帮我啊 ! 刚接触JAVA,想问一下applet,servlet,javabean,struts它们都有什么区别呀? 两种写法有何区别呢? Boland JB的小问题,上分了 哪里有制作安装程序的软件下载 怎么查看一个变量占用的内存大小 正则问题
long i=3232235879l;
//这里转换成int类型
int j=(int)i;
System.out.println(j);//这里输出的是-1062731417
//这里你用右位移运算,向右位移一位
long temp=j>>>1;
temp<<=1;
//判断是否为奇数,奇数加1
if(j%2!=0){
temp+=1;
}
System.out.println(temp);
不知是不是都可逆,不过这个转回去了。