`
paddy.w
  • 浏览: 497469 次
  • 性别: 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(以及大多数现代计算机系统中)中,整数通常使用补码(Two's Complement)形式来表示。补码表示法不仅简化了加减运算,还使得负数的存储和正数一样简单高效

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

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

    Java 基本知识之基本数据类型

    byte 数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; short 数据类型是 16 位、有符号的以二进制补码表示的整数 最小值是-32768(-2^15); 最大值...

    corejava,java基础适用于初学者

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

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

    为什么需要反码和补码 反码 o在计算机的时候,只有加法器没有减法器,为了将减法转换为加法,设计反码;...o但是反码有缺陷,正负相加 0 的表示不唯一; 补码 o为了解决反码正负相加不唯一的情况,使用高位溢出解决;

    能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。

    能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。

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

    能够实现定点小数的机器数表示,定点小数的变形补码加减法运算,定点小数的原码一位乘法运算和浮点数的加减法。

    JAVA基础之java的移位运算

    Java 使用大家知道的2的补码(two's complement )这种编码来表示负数,也就是通过将与其对应的正数的二进制代码取反(即将1变成0,将0变成1),然后对其结果加1。例如,-42就是通过将42的二进制代码的各个位取反,...

    整理后java开发全套达内学习笔记(含练习)

    二进制是无法精确的表示 0.1 的。 进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时...

    java版2048源码下载-jvm:实战虚拟机

    整数用补码表示,正数的补码是本身,负数的补码就是反码+1。反码就是符号位不变,其他位取反。 补码的好处 0既不是正数也不是负数,反码不好表示,补码则相同。 补码将加减法的做法完全统一,无需区分正数和负数 ...

    关于整型的表示方法和范围问题

    关于整型的表示方问题二:int a=(byte)128;为什么a的值是-128?法问题1:为什么baye最小值是-128而不是-127呢?和范围问题问题三:java中byte类型最大值是127,再加1为什么是-128?

    返回字符Unicode码

    一个vbs脚本程序,练习之用,应用短除法将十进制转二进制,从而显示输入字符的二进制码,负数用补码表示。

    二进制运算

    32位的最高位上符号位,0表示正数,1表示负数 正数的原码,反码,补码都是一样 负数反码的原码的符号位不变,其它的位数取反(0-1==1-0) 负数补码是反码+1 0的反码和补码都是0 java中所有数都是符号的 计算机...

    整数的二进制表示与位运算

    正整数相乘的结果居然出现了负数,要理解这个行为,我们需要看下整数在计算机内部的二进制表示...... 负数的二进制表示看上去可能比较奇怪和难以理解,但这种表示其实是非常严谨和正确的,是不是很奇妙?

    javascript 二进制运算技巧解析

    1、原码、反码、补码,正数减法转补码加法 js 在进行二进制运算时,使用 32 位二进制整数,由于 js 的整数都是有符号数,最高位0表示正数,1表示负数,因此,js 二进制运算中使用的整数表达范围是 代码如下: -Math....

    二进制图文详解

    - Java利用算法支持了补码计算: - Integer.parseInt() - Integer.toString() 3. 补码的缺点: - 不支持超范围计算 - 超范围计算自动溢出 4. 解决补码的缺点:采用更大范围(更多位数)的补码 Java是如何计算 ...

    二进制、八进制、十进制、十六进制之间的转换

    文档中包含了java中各个进制的表示形式、源码、补码、位运算、以及多个进制之间的转化思想,并附有相关代码,实现多进制之间的相互转化

    计算机软件水平考试软件设计师考试大纲与培训指南(2009版)

     数的表示(补码表示,整数和实数的表示,精度和溢出)  非数值表示(字符和汉字表示,声音表示、图像表示) 1.3算术运算和逻辑运算  计算机中的二进制数运算方法  逻辑代数的基本运算 1.4其他数学基础知识 ...

    leetcode下载-LeetCode_No.190_-:LeetCode_No.190_-

    中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。   进阶: 如果多次调用这个函数,你将如何优化你的算法?   示例 1: 输入...

    java版bs公交服务网源码-full-stack:全栈

    java版bs公交服务网源码全栈 计算机科学 [0/5] 数字编码 OR、AND、XOR、Shift(逻辑与算术) 一个人的补 补码 BCD编码 浮点数:(ieee754) 解释尾数,指数 你如何比较两个浮点值? 解释在商业编程中使用浮点数的风险 ...

Global site tag (gtag.js) - Google Analytics