0 0

关于JAVA的基本类型的强制转换?10

public class IntegerTest {
public static void main(String[] args){
long l = 0xc0a86670;

(1) System.out.println(l);     -1062705552

l += 2 * ((long) Integer.MAX_VALUE) + 2;  

(2) System.out.println(l);     3232261744

(3) System.out.println(Long.toHexString(l));   c0a86670
}
}

想问一下:(1) 为什么会得出-1062705552这样一个值,应该是超出了类型范围吧,但得出-1062705552这样一个数是怎么样的出来了啊?

(2) l += 2 * ((long) Integer.MAX_VALUE) + 2; 这样处理后似乎得出了0xc0a86670它的真的的十进制数值,为什么要这样算,还不大明白?

那位高人能把我分析一下吗?非常感谢!!!
2009年1月15日 19:39

2个答案 按时间排序 按投票排序

0 0

为什么
long l = 0xc0a86671;可以

long l=3232261745不可以呢??
说3232261745超出了整数范围!!
还有二进制位数小于64位的16进制数就不会发生正变负的现象。是不是小于64位的时候自动补零啊,而等于64位的时候前面补不了零了只有把1按符号位对待了.

2009年1月16日 11:11
0 0

0xc0a86670
这是一个int型的十六进制字面量。它被赋值给long型的时候,自然是做带符号扩展到long。首位是1,所以整个数字是负数,没问题。
要long型的字面量的话,在数字的后面加上l或者L后缀:0xc0a86670L,十进制值是3232261744。

2 * ((long) Integer.MAX_VALUE) + 2的十进制值是4294967296,而0xc0a86670的十进制值是-1062705552,加在一起自然是正的……
正好得到0xc0a86670L的值的原因是补码本来就是通过“取反加一”来得到相反数的。
Integer.MAX_VALUE是0x7FFFFFFF,乘以2就是0xFFFFFFFFL,再加上2就是0x100000000L。

留意:0xc0a86670带符号扩展到long之后是ffffffffc0a86671,再加上那个数的话:
ffffffffc0a86670
0000000100000000
就把高32位的FFFFFFFF给清掉了。剩下的就是原本低32位的内容。

2009年1月15日 20:29

相关推荐

    java 常用基础类型之强制转换

    在“java 常用基础类型之强制转换”这个主题中,我们将深入探讨Java中的基本数据类型转换规则和注意事项。 1. **基本数据类型的转换** Java中有八种基本数据类型:`byte`, `short`, `int`, `long`, `float`, `...

    深入分析java中的类型转换

    Java中除了基本数据类型之外,还有一系列与之对应的包装类,例如`Integer`、`Double`等。这些包装类提供了更丰富的功能,例如字符串转换、比较操作等。 ##### 包装数据类型的转换 - **包装类→基本数据类型**: 可以...

    Java基本类型转换.doc

    本文主要探讨Java中的基本类型转换,包括简单数据类型之间的转换、字符串与其他数据类型的转换以及一些实用的数据类型转换。 1. 简单数据类型之间的转换 Java中的简单数据类型包括布尔型(boolean)、字符型(char...

    Java中强制类型转换共2页.pdf.zip

    Java的类型系统分为两大类:基本类型(如int、char、boolean等)和引用类型(如类、接口实例)。在进行类型转换时,Java有自动类型转换和强制类型转换两种方式。 1. 自动类型转换(widening conversion): 当我们...

    Java 基本语法(三)——运算符和类型转换

    ### Java基本语法(三)——运算符和类型转换 #### 运算符 在Java语言中,运算符是用于执行特定操作的关键元素之一。本文将详细介绍各种运算符及其使用方法。 ##### 算术运算符 Java中的算术运算符包括加(`+`)、...

    JAVA类型转换.pdf

    它涉及到数据类型之间的相互转换,包括自动转换和强制转换两种方式。自动转换(也称隐式转换)是由编译器自动完成的,而强制转换则需要程序员明确指定转换的方式。 在Java中,数据类型按照大小可以分为两大类:基本...

    JAVA数据类型转换.pdf

    在Java编程中,数据类型转换是一项基本且重要的技能。本文档将详细介绍Java中的数据类型转换,包括简单数据类型之间的转换、字符串与其他数据类型的转换以及一些实用的数据类型转换技巧。掌握这些转换方法能够帮助...

    java 数据类型转换

    - 反之,当包装类对象被用于基本类型的地方时,会发生拆箱(unboxing)转换。 ### 强制类型转换(显式转换) 强制类型转换需要程序员明确地进行,通常用在将大范围的数据类型转换为小范围的数据类型时。转换语法...

    Java实验-基本数据类型及操作

    2. 显示类型转换:显示类型转换是指使用强制类型转换符号将一种数据类型转换为另一种数据类型的过程,例如将int类型转换为float类型。 三、控制台输入输出方法 控制台输入输出方法是指使用System.in和System.out...

    Java基础之隐式转换vs强制转换

    在Java编程语言中,类型转换是一项基本操作,用于在不同数据类型之间进行转换。主要分为两种类型:隐式转换和强制转换。 隐式转换是指在某些特定情况下,编译器会自动进行的数据类型转换,无需程序员显式指定。在...

    JAVA类型转换[文].pdf

    // 强制转换,可能会溢出 ``` - **包装类过渡**:可以使用包装类(如Integer、Float)作为中间转换工具,提供额外的转换方法。例如: ```java float f = 100.0f; Integer i = new Float(f).intValue(); // ...

    Java基本数据类型转换-学习笔记.docx

    在Java编程语言中,了解和掌握基本数据类型的转换至关重要,因为这是编写高效、无错代码的基础。本篇学习笔记将详细解析Java中的数据类型转换及其相关的知识点。 首先,我们需要了解Java的基本数据类型,它们分为两...

    JAVA变量类型之间的相互转换

    ### JAVA变量类型之间的相互转换详解 在JAVA编程中,数据类型的转换...无论是基本类型之间的转换,还是与字符串、日期类型之间的转换,都有其特定的方法和规则。开发者应熟悉这些转换机制,以便在实际开发中灵活运用。

    java数据类型转换

    本文详细介绍了Java中的数据类型转换规则,包括自动类型转换、强制类型转换和包装类过渡类型转换等内容。通过理解这些转换机制,开发者可以更灵活地处理不同类型之间的数据交换,从而编写出更加高效、健壮的程序。...

    Java中自动类型转换共3页.pdf.zip

    在Java中,类型转换是一项基本操作,特别是在处理数据时。本压缩包包含的“Java中自动类型转换共3页.pdf”文件,很显然,它将详细讲解Java中的自动类型转换这一关键概念。以下是关于Java自动类型转换的一些核心知识...

    java的基本类型详解

    以下是对Java基本数据类型的简要概述: 基本数据类型直接存储数据,不存储引用。 每种类型有固定的内存大小和取值范围。 它们具有默认值,未初始化时自动赋予。 自动类型转换(宽化转换):从范围小的类型到范围大的...

    Java中对null进行强制类型转换的方法

    首先,让我们看一下基本类型的强制类型转换。假设我们有一个 Object 类型的变量 obj,赋值为 null,我们想将其强制类型转换为 Integer 类型: ```java Object obj = null; Integer s1 = (Integer)obj; ``` 在这里,...

    java类型转换大全

    1. **基本类型之间的转换**:Java中有八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)以及布尔型(boolean)。它们之间可以进行隐式或显式转换。例如,较小的数值...

    Java数据类型操作包含转换代码实例.rar

    在Java编程语言中,数据类型是程序设计的基础,它们分为两大类:基本数据类型和引用数据类型。这个压缩包“Java数据类型操作包含转换代码实例.rar”提供了丰富的代码示例,帮助初学者理解和掌握Java中数据类型的转换...

Global site tag (gtag.js) - Google Analytics