整数的存储方式
- 生活中的整数分为 正整数与负整数,例如 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就得到补码
- 负数的补码求原码,补码减1得到反码,然后是反码的最高位不变,其他数据位取反得到原码
计算机为什么要使用补码存储、计算数据
计算机使用补码储存数据、计算数据,为什么不使用原码与反码呢?
引入四个整数的原码
- +1 原码 0000 0001
- -1 原码 1000 0001
- +0 原码 0000 0000
- -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
补码解决了原码和反码再存储数以及计算数据的问题。因此计算机使用补码来存储和计算。