如何 将 超过int最大值的 long值 转成int , 然后再转换回来

如何 将 超过int最大值的 long值 转成int , 然后再转换回来publicstaticvoidmain(String[]args){//定义16进制数的字符串:f3000192Strings16="f3000192";//将16进制转为10进制//f3000192=2*16`0+9*16`1+1*16`2+0*16`3…

因为 long值 如果 超过int的最大值, 在转换成int的时候, 会出现丢失位的现象 ,
所以通过普通的方法 是转不回来的,
需要进行位运算, 才可以

```
    public static void main(String[] args) {
    
    // 定义 16 进制数 的字符串 :  f3000192
    String s16 = "f3000192";
    
    // 将 16进制 转为 10进制
    // f3000192 = 2*16`0 + 9*16`1 + 1*16`2 + 0*16`3 + 0*16`4 + 0*16`5 + 3*16`6   + 15*16`7    = 4076863890 
    //          = 2*1    + 144    + 1*256  + 0      + 0      + 0      + 50331648 + 4026531840 = 4076863890
    Long parseLong = Long.parseLong(s16, 16);
    System.out.println(parseLong);// 结果为 4076863890
    
    /*
     * long 的取值 范围 为 -2^63~2^63-1 
     * int  的取值 范围 为 -2147483648~2147483647 
     * 
     * 将 long 强转为 int时 ; 因为 数字 超过了 int 的最大值范围
     * 4076863890 long
     * 2147483647 int
     * 
     * long是64位的,转成int的时候直接把高32位去掉了
     * 
     * 比如
     * Long.MAX_VALUE在Java中的值是2的63次方,即011111111111111(63个1) 
     * 最前面的是符号位 0为正数,1为负数,int截取了后面的32位数 为111111111(32个1) 
     */
    Integer parseInt = parseLong.intValue();
    System.out.println(parseInt);// 结果为 -218103406
    // 再将 int 转回 成 long 此时 已经 转不回来了
    System.out.println(parseInt.longValue());// 结果仍然 为 -218103406
    
    /*
     * 转换成int类型以后,数字的最高位是1的缘故,所以为负数
     * 转换回来要变成正数,需要按照取反加1的原则
     * 
     * 用>>>无符号向右位移一位,
     * 然后再转换成long再用<<符号左位移一位,
     * 
     * 因为向右位移一位会丢失一位,因此要判断数字是否为奇数,
     * 如果是奇数,那么最右一位为1,那么转换完成以后要+1,
     * 如果是偶数,最右一位是0,那么左位移以后就不用再做处理了。
     * 
     * 位运算可以程序设计的基础,虽然不常用到,但是能解决很多棘手的问题
     */
    long turnback = parseInt >>> 1; // 右位移运算,向右位移一位
    turnback <<= 1;

    // 判断是否为奇数,奇数加1
    if (parseInt % 2 != 0) {
        turnback += 1;
    }
    System.out.println(turnback);// 结果 又 变回 4076863890 了
}
```

今天的文章如何 将 超过int最大值的 long值 转成int , 然后再转换回来分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/10415.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注