首页 > 编程知识 正文

c语言中long int与int的区别,int和longint分别什么意思

时间:2023-05-06 14:57:01 阅读:188141 作者:1707

因为 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 了}```

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。