精华内容
下载资源
问答
  • java中long转int的原理

    千次阅读 2018-03-18 21:09:06
    long转为int需要强转都很熟悉,那么介绍一下强转的具体原理。首先在计算机,计算加法减法是用补码计算的。正数的补码为其二进制表示。负数的补码为其模的二进制表示取反加一。加入为八位二进制加法,如:+3+(-5) ...

    long转为int需要强转都很熟悉,那么介绍一下强转的具体原理。

    首先在计算机中,计算加法减法是用补码计算的。

    正数的补码为其二进制表示。负数的补码为其模的二进制表示取反加一。

    加入为八位二进制加法,如:+3+(-5) 

    +3的补码为00000011

    -5的模为+5,二进制表示为00000101,取反为11111010,加一后为11111011,所以-5的补码为11111011


    加法计算公式为:两个数的补码相加,如果是正,则直接输出,如果是负,则除符号位以外取反加一

    +3和-5的补码之和为11111110,为负数,去掉符号位第一位 1 ,剩下1111110,取反加一后为10

    10为十进制中的2,所以带上符号位为-2。


    众所周知,java中long为8字节64位,int为4字节32位。

    java如果long强转为int,做的事为:直接取低位32位作为值,但是看做补码。


    代码如下:

    long  long= 37444124124l;

    System.out.println((int)long);

    输出值为-1210581540

    首先37444124124 转为二进制为

    100010110111110101111111110111011100


    后32位为:10110111110101111111110111011100

    这个后32位直接当做计算结果输出:符号位为1,则是负数,负数取后31位取反加一

    1001000001010000000001000100100

    为:1210581540

    加上符号位为-1210581540



    展开全文
  • 今天项目突然要改一个字段的类型,int改成Long类型的,,,我自己随便测试的时候,转换出来的值变成了负数,觉得很奇怪,于是研究了一下,测试结果如下: ...

    今天项目中突然要改一个字段的类型,int改成Long类型的,,,我自己随便测试的时候,转换出来的值变成了负数,觉得很奇怪,于是研究了一下,测试结果如下:

    展开全文
  • long long JDK 8附带所有令人眼前一亮的东西( lambda表达式,流, Optional ,新的Date / Time API等)来分散我的注意力,我并没有过多注意添加方法Math.toIntExact() 。... 如果值溢出int则引发异常。” 这在...
    long long

    long long

    JDK 8附带所有令人眼前一亮的东西( lambda表达式Optional ,新的Date / Time API等)来分散我的注意力,我并没有过多注意添加方法Math.toIntExact() 但是,这种小的添加本身可能会非常有用。

    Math.toIntExact(long)Javadoc文档指出:“返回long参数的值; 如果值溢出int则引发异常。” 这在给定或已经具有Long且需要调用期望int的API的情况下特别有用。 当然,最好是可以将API更改为使用相同的数据类型,但是有时这是无法控制的。 当需要将Long强制为int值时,可能会发生整数溢出,因为Long的数值可能比int可以准确表示的数值大。

    如果有人告诉给定的Long永远不会大于int所能容纳的Math.toIntExact(Long) ,则静态方法Math.toIntExact(Long)特别有用,因为如果出现这种“异常”情况,它将抛出未经检查的ArithmeticException ,这很明显发生“例外”情况。

    Long.intValue()用于从Long获取整数时,如果发生整数溢出,则不会引发异常。 而是提供了一个整数,但是由于整数溢出,该值很少有用。 在几乎每种可能的情况下,遇到运行时异常都会向整数警报发出警报的情况要比让软件继续错误地使用溢出数更好。

    如在示出之间的差异的第一步Long.intValue()Math.toIntExact(Long) ,下面的代码生成的范围内Long为5的值小于Integer.MAX_VALUE的至5以上Integer.MAX_VALUE

    包含Integer.MAX_VALUELong的生成范围

    /**
     * Generate {@code Long}s from range of integers that start
     * before {@code Integer.MAX_VALUE} and end after that
     * maximum integer value.
     *
     * @return {@code Long}s generated over range includes
     *    {@code Integer.MAX_VALUE}.
     */
    public static List<Long> generateLongInts()
    {
       final Long maximumIntegerAsLong = Long.valueOf(Integer.MAX_VALUE);
       final Long startingLong = maximumIntegerAsLong - 5;
       final Long endingLong = maximumIntegerAsLong + 5;
       return LongStream.range(startingLong, endingLong).boxed().collect(Collectors.toList());
    }

    下一个代码清单显示了两种方法,这些方法演示了前面提到的两种从Long获取int方法。

    使用Long.intValue()Math.toIntExact(Long)

    /**
     * Provides the {@code int} representation of the provided
     * {@code Long} based on an invocation of the provided
     * {@code Long} object's {@code intValue()} method.
     *
     * @param longRepresentation {@code Long} for which {@code int}
     *    value extracted with {@code intValue()} will be returned.
     * @return {@code int} value corresponding to the provided
     *    {@code Long} as provided by invoking the method
     *    {@code intValue()} on that provided {@code Long}.
     * @throws NullPointerException Thrown if the provided long
     *    representation is {@code null}.
     */
    public static void writeLongIntValue(final Long longRepresentation)
    {
       out.print(longRepresentation + " =>       Long.intValue() = ");
       try
       {
          out.println(longRepresentation.intValue());
       }
       catch (Exception exception)
       {
          out.println("ERROR - " + exception);
       }
    }
    
    /**
     * Provides the {@code int} representation of the provided
     * {@code Long} based on an invocation of {@code Math.toIntExact(Long)}
     * on the provided {@code Long}.
     *
     * @param longRepresentation {@code Long} for which {@code int}
     *    value extracted with {@code Math.toIntExact(Long)} will be
     *    returned.
     * @return {@code int} value corresponding to the provided
     *    {@code Long} as provided by invoking the method
     *    {@code Math.toIntExact)Long} on that provided {@code Long}.
     * @throws NullPointerException Thrown if the provided long
     *    representation is {@code null}.
     * @throws ArithmeticException Thrown if the provided {@code Long}
     *    cannot be represented as an integer without overflow.
     */
    public static void writeIntExact(final Long longRepresentation)
    {
       out.print(longRepresentation + " => Math.toIntExact(Long) = ");
       try
       {
          out.println(Math.toIntExact(longRepresentation));
       }
       catch (Exception exception)
       {
          out.println("ERROR: " + exception);
       }
    }

    当以上代码使用在先前代码清单中构建的Long的范围( GitHub上提供完整代码)执行时,输出如下所示:

    2147483642 =>       Long.intValue() = 2147483642
    2147483642 => Math.toIntExact(Long) = 2147483642
    2147483643 =>       Long.intValue() = 2147483643
    2147483643 => Math.toIntExact(Long) = 2147483643
    2147483644 =>       Long.intValue() = 2147483644
    2147483644 => Math.toIntExact(Long) = 2147483644
    2147483645 =>       Long.intValue() = 2147483645
    2147483645 => Math.toIntExact(Long) = 2147483645
    2147483646 =>       Long.intValue() = 2147483646
    2147483646 => Math.toIntExact(Long) = 2147483646
    2147483647 =>       Long.intValue() = 2147483647
    2147483647 => Math.toIntExact(Long) = 2147483647
    2147483648 =>       Long.intValue() = -2147483648
    2147483648 => Math.toIntExact(Long) = ERROR: java.lang.ArithmeticException: integer overflow
    2147483649 =>       Long.intValue() = -2147483647
    2147483649 => Math.toIntExact(Long) = ERROR: java.lang.ArithmeticException: integer overflow
    2147483650 =>       Long.intValue() = -2147483646
    2147483650 => Math.toIntExact(Long) = ERROR: java.lang.ArithmeticException: integer overflow
    2147483651 =>       Long.intValue() = -2147483645
    2147483651 => Math.toIntExact(Long) = ERROR: java.lang.ArithmeticException: integer overflow

    高亮显示的行指示代码处理Long的值等于Integer.MAX_VALUE的代码。 此后,将显示代表比Integer.MAX_VALUE多一个的Long并显示尝试使用Long.intValue()Math.toIntExact(Long)将该Long转换为int的结果。 Long.intValue()方法遇到整数溢出,但不会引发异常,而是返回负数-2147483648 Math.toIntExact(Long)方法在整数溢出时不返回任何值,而是引发ArithmeticException与信息性消息“整数溢出”。

    Math.toIntExact(Long)方法的重要性不如JDK 8引入的许多功能重要,但它对于避免有时可能难以诊断的整数溢出相关的错误类型很有用。

    翻译自: https://www.javacodegeeks.com/2018/06/exact-conversion-long-to-int-java.html

    long long

    展开全文
  • 问题如何在Java中将long转换为int?#1 热门回答(218 赞)简单类型转换应该这样做:long l = 100000;int i = (int) l;但请注意,大数(通常大于2147483647且小于-2147483648)将丢失一些位并且将被错误地表示。例如,...

    问题

    如何在Java中将long转换为int?

    #1 热门回答(218 赞)

    简单类型转换应该这样做:

    long l = 100000;

    int i = (int) l;

    但请注意,大数(通常大于2147483647且小于-2147483648)将丢失一些位并且将被错误地表示。

    例如,2147483648将表示为-2147483648。

    #2 热门回答(142 赞)

    Long x = 100L;

    int y = x.intValue();

    #3 热门回答(54 赞)

    对于小值,铸造就足够了:

    long l = 42;

    int i = (int) l;

    但是,along可以比aint保存更多信息,因此在一般情况下不可能完美地从long转换为int。如果4119131590持有一个小于或等于Integer.MAX_VALUE的数字,你可以通过铸造转换它而不会丢失任何信息。

    例如,以下示例代码:

    System.out.println( "largest long is " + Long.MAX_VALUE );

    System.out.println( "largest int is " + Integer.MAX_VALUE );

    long x = (long)Integer.MAX_VALUE;

    x++;

    System.out.println("long x=" + x);

    int y = (int) x;

    System.out.println("int y=" + y);

    在我的机器上产生以下输出:

    largest long is 9223372036854775807

    largest int is 2147483647

    long x=2147483648

    int y=-2147483648

    请注意y上的负号。因为x保持的值大于Integer.MAX_VALUE,所以int y无法保留它。在这种情况下,它缠绕到负数。

    如果你想自己处理这种情况,可以执行以下操作:

    if ( x > (long)Integer.MAX_VALUE ) {

    // x is too big to convert, throw an exception or something useful

    }

    else {

    y = (int)x;

    }

    所有这些都假定为正数。对于负数,请使用MIN_VALUE而不是"MAX_VALUE"

    展开全文
  • java中long 转换成 int

    2015-02-09 15:46:52
    int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况:  主要以下几种转换方法,供参考:  一、强制类型转换 long ll = 200000; ...
  • java中long类型转换为int类型 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一、强制类型转换 ...
  • Java中long和int互相转换,不改变原有数据 文章目录Java中long和int互相转换,不改变原有数据测试方法,及封装好的方法封装好之后的方法 测试方法,及封装好的方法 ... // long转int数组 int pre, suffix; pre =...
  • JDK 8附带所有令人眼前一亮的 东西 ( lambda表达式 , 流 , Optional ,新的Date / Time API等)来分散... Math.toIntExact(long)的Javadoc文档指出:“返回long参数的值; 如果值溢出int则引发异常。” 这在给...
  • 目的是将秒数表示的时间转换为字符串日期时间 ... 上图是秒数 经过将秒数乘以1000变成毫秒数后, long now = 下图 ...是由于int的长度不够,但是long now = 1491118634 * 1000为什么会变成764982288,求各位大神解惑
  • int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一、强制类型转换 [java] long ll = 300000; int ii ...
  • //long类型成byte数组public static byte[] longToByte(long number) {long temp = number;byte[] b = new byte[8];for (int i = 0; i < b.length; i++) {b[i] = new Long(temp & 0xff).byteValue();//将...
  • JAVA中Long类型转换为int类型

    千次阅读 2019-07-12 12:55:01
    int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一、强制类型转换 [java] long ll = 300000; int ii =...
  • 最近由于在做一个众筹的项目,其中有一个查找项目支持数的接口,查找的方法定义的是一个long型的,我更新项目的支持数的时候是int型的,所以需要在long型与int型之间转化,下面把转化的详细方法记录一下,以便...
  • 主要讲解Java中基本数据类型,java long 类型与其java int类型的转换的几种方法,希望能给大家做一个参考
  • Java的数据类型分两种:1.基本类型:long,int,byte,float,double,char2. 对象类型(类): Long,Integer,Byte,Float,Double,Char,String,其它一切java提供的,或者你自己创建的类。...在java中有时候的运算...
  • Oracle数据库number类型在hibernate的引用 1)如果不指定number的长度,或指定长度n>18 idnumber not null,转换为pojo类时,为java.math.BigDecimal类型 2)如果number的长度在10 <= n <= 18 ...
  • 我就废话不多说了,大家还是直接看代码吧~public static void main(String[] args) {// 1、将long型转化为int型,其中intlong是基础类型long a = 10;int b = (int) a;System.out.println("1、将long型转化为int型:...
  • // long类型成byte数组 public static byte[] longToByte(long number) { long temp = number; byte[] b = new byte[8]; for (int i = 0; i ; i++) { b[i] = new
  • Java的数据类型分两种:1.基本类型:long,int,byte,float,double,char2. 对象类型(类): Long,Integer,Byte,Float,Double,Char,String,其它一切java提供的,或者你自己创建的类。...在java中有时候的运算...
  • java中,有三种方法可以将float转换为longint,但我们只关注long数据类型部分。将float数据类型转换为long值的第一种方法是将auto-box float原语转换为float对象并调用longvalue()方法。这是一种更结构化的方法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,747
精华内容 1,098
关键字:

java中long转int

java 订阅