`
paddy.w
  • 浏览: 504995 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java的补码表示

    博客分类:
  • Java
 
阅读更多
        最近发现一个比较低级的问题,就是java中的数值表示。Java是使用补码表示数值的,但一直忽略了哪个是源码,哪个是补码。看这个简单的例子:
public class JavaTest {

	public static void main(String[] args) throws Exception {
        System.out.println((byte)129);
	}
}

        129显然超出了byte所表示的范围-128~127。127的二进制表示是01111111,则129应该表示为10000001,但是int和byte是有符号的。所以这个结果是-1,但这却是一个错误的结果,程序运行的真正结果是-127。
        之所以会有这样的结果是因为Java使用补码表示的,127是整数,所以补码和原码是一样的,我们在对127进行+2操作时也是对补码进行,所以我们看到的100000001这个是补码,转换成原码是11111111,也就是-127。符合程序结果。
分享到:
评论
1 楼 draem0507 2015-02-04  
129应该表示为00000000 10000001,转成byte 去掉高位编程10000001,由于高位是1 说明是负数,计算机都是使用补码表示
而负数取源码的方式为先取反+1,高位不变 11111110+1 变成11111111

相关推荐

    Java 补码详细内容解析

    因此,当在 Java 中操作整数时,实际上是在操作这些整数的补码表示。 - **`byte`**:8 位补码表示,范围为 -128 至 127。 - **`short`**:16 位补码表示,范围为 -32768 至 32767。 - **`int`**:32 位补码表示,...

    计算机补码

    * 编程语言:补码可以用于编程语言中,例如 C 语言、Java 语言等 补码的优点 补码有以下几个优点: * 解决了负数的机器表示问题 * 提高了算术运算的速度和效率 * 简化了编程语言的设计和实现 补码的缺点 补码也...

    Java为什么使用补码进行计算的原因分析

    对于两个补码表示的数,无论是正数还是负数,只需要做加法运算,结果的符号位决定了最终的正负。例如,-4(补码10000000 00000000 00000000 00000100)加上4(补码00000000 00000000 00000000 00000100),相当于两...

    【IT十八掌徐培成】Java基础第02天-02.字节-负数表示-补码-128计算.zip

    总之,这个Java基础教程通过讲解字节、负数的补码表示以及与128相关的计算,旨在帮助初学者建立起对计算机底层数据表示的深刻理解。这些基础知识不仅对于学习Java,也对于其他编程语言的学习和计算机系统的理解有着...

    【Java】循环移码和补码.zip

    例如,两个补码表示的数相加,可以通过逐位加法和考虑进位来完成,这在实现加法器时尤为重要。 项目中包含的文件"JavaGUI.iml"可能是一个IntelliJ IDEA项目文件,用于管理项目的结构和配置。"src"目录通常包含了...

    计算机中的原码、反码和补码

    在深入探讨计算机中表示有符号整数的原码、反码和补码之前,让我们先回顾一下计算机存储数据的基本单位——字节。正如文中所述,一个字节由8位组成,每位可以是0或1,因此一个字节可以表示\(2^8 = 256\)种不同的状态...

    JAVA基础补充(0)-原码反码补码.doc

    在8位系统中,-128的补码表示为10000000,而其原码表示为11111111取反后加1,即10000000。 在进行位运算时,理解原码、反码和补码的转换规则非常关键,因为它们直接影响计算结果。例如,位左移、位右移等操作在正...

    为什么需要反码和补码?.docx

    总之,原码、反码和补码是计算机中表示和处理整数的重要手段,尤其是补码,它不仅解决了正负数相加的不唯一性,还使减法可以通过加法来实现,极大地简化了计算机硬件的设计。在Java和其他编程语言中,这些底层的计算...

    java位运算大全.doc

    - byte:8位,两个补码表示,范围是-128到127。 - short:16位,两个补码表示,范围是-32768到32767。 - int:32位,两个补码表示,范围是-2^31到2^31-1。 - long:64位,两个补码表示,范围是-2^63到2^63-1。 ...

    java二进制补码源码-Algorithms-in-Java:常用算法包括:排序算法,两个指针,动态编程,回溯,KMP,位操作等

    例如,对于8位二进制,-5的原码是10000101,取反得到11111010,再加一得到11111011,这就是-5的补码表示。这种表示方式使得在位运算中,如加法、减法、位移等,正负数的处理规则统一。 在这个"Algorithms-in-Java...

    Java学习心得

    每种数据类型都有其特点和用途,例如byte数据类型是8位、有符号的,以二进制补码表示的整数,主要用在大型数组中节约空间。int数据类型是32位、有符号的以二进制补码表示的整数,经常用在普通的整数变量中。long数据...

    CoreJava全套详细笔记资料.pdf

    * char类型是Java中的基本数据类型,用于表示单个字符。 * char类型占用2个字节,范围从0到65535。 * char类型可以使用单引号或unicode编码表示。 三、运算符 * 运算符是Java语言中的基本操作符,用于执行各种操作...

    java十进制转换二进制

    2. **处理负数情况**:如果输入的整数`i`小于0,则将其变为其补码表示,并将`minus`标志设置为`true`。这里通过`i = -i + 1`实现了这一点。 3. **循环转换**:进入循环,直到`i`变为0为止。在每次循环中: - 判断`i...

    corejava,java基础适用于初学者

    计算机内部数据以2迚制补码表示的。 * 8 16迚制 了解16迚制并理解是2迚制的简写 * 9 8种基本数据类型 认识Java中8种数据类型,了解Java中基本数据类型的特点 ** 10 整数类型 理解整数类型的分类、叏值范围 ** 11

    Java基础-标识符、关键字、数据类型练习题.doc

    在计算机中,二进制数可以用补码来表示。补码的计算规则如下: * 正数的补码是其本身。 * 负数的补码是其反码加1。 例如,数据的源码为`10100110`,其补码是`11011010`。 4. 数字类型的选择 在Java语言中,有六...

    计算机组成原理算法实现 (二)

    在“计算机组成原理算法实现(二)”这一主题中,我们将深入探讨几个核心概念,包括定点小数的机器数表示、定点小数的变形补码加减法运算、定点小数的原码一位乘法以及浮点数的加减法。 首先,定点小数是一种数值...

    java基础总结大全(笔记).pdf

    - 原码、反码和补码是表示有符号数据的方式,主要用于计算机内部存储和处理负数。 11. 函数定义: - 函数是一段具有特定功能的独立代码,可以提高代码的复用性。 - 如果函数没有返回值,可以用void表示,return...

    java byte相互转换详解左右位移

    在理解这些操作的过程中,我们需要考虑到Java中整数的补码表示法。byte在内存中也是以补码形式存储的。在进行位移操作时,补码形式的数值保持符号位不变。例如,对于一个byte类型的负数,其原码可能是***,那么它的...

    JAVA基础之java的移位运算

    在Java中,所有的整数类型(除了char类型外)都是有符号的,这意味着它们能表示正数和负数,而负数使用2的补码表示。 **2的补码表示法**: 在2的补码表示法中,负数的二进制形式是其正数对应值的二进制位取反后再加...

Global site tag (gtag.js) - Google Analytics