Java-原码反码补码

释放双眼,带上耳机,听听看~!

整数的存储方式

  • 生活中的整数分为 正整数与负整数,例如 15 与 -15。

  • 计算机如何表示负数?

    • 计算机内部采用二进制来存储数据,例如一个自己的00001111。

  • 什么是有符号数和无符号数?

    • 有符号数的二进制由符号位和数据位组成。

    • 有符号数的符号位如果是0,那就表示这个二进制数是正数。

    • 有符号数的符号位如果是1,那就表示这个二进制数是负数。

    • 无符号数的二进制由数据位组成,不能表示负数,最小值是0。

  • char 0-65535 2个字节 无符号的整数

  • short -32768-32767 2个字节 有符号的整数

原码、反码、补码的介绍和换算

原码、反码、补码 都是数据二进制的表示方式。

  • 原码

    • 十进制的 +15 二进制原码 0000 1111

    • 十进制的 -15 二进制原码 1000 1111

  • 反码

    • 整数的反码 就是原码

    • 负数的反码就是原码的最高位不变,其他位取反

    • 十进制的 +15 二进制原码 0000 1111 二进制反码 0000 1111

    • 十进制的 -15 二进制原码 1000 1111 二进制反码 1111 0000

  • 补码

    • 整数的补码,就是原码

    • 负数的补码,就是反码加1

    • 十进制的 +15 二进制原码 0000 1111 二进制反码 0000 1111 二进制补码 0000 1111

    • 十进制的 -15 二进制原码 1000 1111 二进制反码 1111 0000 二进制补码 1111 0001

总结:

  1. 整数的原码、反码、补码都是一样的

  2. 负数的原码求补码,原码的最高位不变,其他数据位取反得到反码。反码再加1就得到补码

  1. 负数的补码求原码,补码减1得到反码,然后是反码的最高位不变,其他数据位取反得到原码

计算机为什么要使用补码存储、计算数据

计算机使用补码储存数据、计算数据,为什么不使用原码与反码呢?

引入四个整数的原码

    1. +1 原码 0000 0001

    2. -1 原码 1000 0001

    1. +0 原码 0000 0000

    2. -0 原码 1000 0000

  • CPU内部只有加法器。

  • 需求1:需要使用原码来计算 1 – 1

    • 1 – 1 = 1 + -1

    • 0000 0001 + 1000 0001 = 1000 0010 换算成十进制就是-2

    • 0使用原码有两个表示方式

    • 原码表示的数据在运算的时候得到的结果都是错误的

  • 需求2:使用反码来计算 1-1

    • +1 原码 0000 0001 反码 0000 00001

    • -1 原码 1000 0001 反码 1111 1110

    • +0 原码 0000 0000 反码 0000 0000

    • -0 原码 1000 0000 反码 1111 1111

    • 1-1 = 1+ -1

    • 0000 0001 + 1111 1110 = 1111 1111

    • 为什么不使用反码存储、计算数据的原因

      • 0使用反码还是有两种表示方式

  • 需求3:使用补码计算 1-1

    • +1 原码 0000 0001 反码 0000 00001 补码 0000 0001

    • -1 原码 1000 0001 反码 1111 1110 补码 1111 1111

    • +0 原码 0000 0000 反码 0000 0000 补码 0000 0000

    • -0 原码 1000 0000 反码 1111 1111 补码0000 0000

    • 1-1 = 1+ -1

    • 0000 0001 + 1111 1111 = 0000 0000

补码解决了原码和反码再存储数以及计算数据的问题。因此计算机使用补码来存储和计算。

给TA买糖
共{{data.count}}人
人已赞赏
技术文章资源分享

类型转换器

2021-9-6 11:47:39

Java教程技术文章

Java-lambda 表达式

2021-9-6 11:49:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索