美文网首页程序员在成长
Java中高位转低位溢出的计算过程

Java中高位转低位溢出的计算过程

作者: 冬天只爱早晨 | 来源:发表于2019-09-18 20:45 被阅读0次
timg.jpg
System.out.println((byte) 129);
System.out.println((byte) -129);
System.out.println("~b2: " + ~10);

结果是:

-127
127
~b2: -11

计算机中是以补码进行计算

正数的反码补码都是原码,如:
10
原码: 1010
反码: 1010
补码:1010

负数 -10
原码 10000000 00000000 00000000 00001010
反码(符号位不变,其余位取反) 01111111 11111111 11111111 11110101
补码(反码+1): 01111111 11111111 11111111 11110110

(byte) 129

对于129,二进制为
00000000 00000000 00000000 10000001
其补码:00000000 00000000 00000000 10000001
由于byte只占1字节即8位,所以,上面截取8位置后如下:10000001
此时最高位为1即负数,该二进制减1即是反码
反码:10000000
原码:11111111
即-127,所以(byte)129的结果就是-127

(byte) -129

-129 二进制为
10000000 00000000 00000000 10000001
对应的补码为(反码+1)
11111111 11111111 11111111 01111111
截取8为后为:01111111
为正数,其原码反码补码均为01111111即127
所以(byte)-129的结果就是127

~10

10的二进制为
00000000 00000000 00000000 00001010
补码是本身,取反之后为
11111111 11111111 11111111 11110101
此时最高位为1,负数,即是负数的补码
该反码(补码-1)
11111111 11111111 11111111 11110100
对应的原码:
10000000 00000000 00000000 00001011 即-11
所以~b2的结果是-11

总结

  • 计算机中是以补码进行计算,原码进行显示
  • 正数的反码补码都是其本身
  • 负数的反码是原码符号位不变其他取反,补码是反码+1

相关文章

  • Java中高位转低位溢出的计算过程

    结果是: 计算机中是以补码进行计算 正数的反码补码都是原码,如:10原码: 1010反码: 1010补码:1010...

  • 【Java面试题】57 short s1 = 1; s1 = s

    Java规范有这样的规则: 高位转低位需要强制转换 低位转高位自动转. short s1 = 1; s1 = s1...

  • 66. Plus One

    模拟人工加法的过程。 从低位到高位,依次计算出每一位数字,过程中需要记录进位。如果最高位进位是1,则需要将整个数组...

  • 移位

    C/C++中的左移是逻辑左移:舍弃最高位,往最低位补零。如果舍弃的最高位是 1,则发生数值溢出。如果没有发...

  • 字符串

    1, 大端小端 大端: 高位在高地址,低位在低地址 小端: 高位在低地址,低位在高地址 2, java.lang....

  • 基金新知识

    股市就是一个从低位到高位,从高位再到低位的过程,周而复始。要想赚市场的钱,要知道的几个指标: “成交量”反应市场的...

  • Kotlin 学习简单总结归纳

    1.1. 低位数据类型转高位需要调用方法 如Byte转Intval n : Byte = 10 val...

  • 大数加法【Java实现】

    Java大数加法运算 将两个加法的相应位从高位到低位依次压入栈stackA和stackB中,结果栈stackSum...

  • JDK1.8源码分析笔记-HashMap

    PUT方法背后的原理 如何存储 1. 计算出key的hash值 扰动处理混合哈希码的高位和低位(实际上只扰动了低位...

  • 对字节序的理解

    对字节序的定义:查看维基百科字条大概的意思就是: 大端序中,高位字节放在低位地址 小端序中,低位字节放在低位地址 ...

网友评论

    本文标题:Java中高位转低位溢出的计算过程

    本文链接:https://www.haomeiwen.com/subject/isakuctx.html