目录
一、byte与bit
- byte(字节)是计算机存储和处理数据的基本单位,通常用8个比特(bit)组成
- 1 byte =8 bit
- 1 KB = 1024b byte 程序员中1K=1024
- 1MB = 1024 KB
- 1 GB = 1024 MB
- 1 TB = 1024 GB
HEX:Hexadecimal十六进制
DEC:decimal 十进制
OCT:octal 八进制
BIN:binary 二进制
二、原码、反码、补码
- 原码反码补码是计算机二进制的三种表现形式,原码最接近人类的算法
- 原码反码补码的设计是为了在计算机中高效地表示有符号整数,并且简化运算
- 计算机在底层都是采用二进制补码形式表示的
- 二进制位最高位称为符号位,0为正数,1为负数
- 原码的存储方式并不固定,他可以根据需要占用不同的字节数。常见的原码表示方法是用固定长度的字节来表示整数,例如,通常会用1个字节表示一个有符号整数的原码
原码
定义:
原码是整数的符号位和绝对值的直接二进制表示。
- 符号位:
0
表示正数1
表示负数
- 数值部分:
使用数的绝对值对应的二进制表示。
计算方法:
- 取整数的绝对值,将其转换为二进制。
- 在最高位添加符号位(0 表示正数,1 表示负数)
2. 反码
定义:
反码是基于原码的一种变形:
- 正数的反码与原码相同。
- 负数的反码是:
- 符号位保持不变(1 表示负数)。
- 数值部分按位取反(即
0
变1
,1
变0
)。
计算方法:
- 如果是正数,反码 = 原码。
- 如果是负数:
- 保留符号位为 1。
- 数值部分逐位取反。
3. 补码
定义:
补码是计算机中表示负数的常用方法:
- 正数的补码与原码相同。
- 负数的补码是:
- 在其反码的基础上 +1(最低位加 1,有进位则继续进位)。
计算方法:
- 如果是正数,补码 = 原码。
- 如果是负数:
- 先计算反码。
- 反码 +1。
三、正数的原码反码补码
- 正数的原码反码补码是相同的
- 127的原码反码补码分别是多少:0111 1111
四、负数的原码反码补码
- 负数的原码:将绝对值转换为二进制后,最高位改为1
如:-5的原码:10000101
- 负数的反码:以原码作为参考,符号位不变,其他位取反
如:-5的反码:11111010
- 负数的补码:以反码作为参考,符号位不变,加1
如:-5的补码:11111011
- 负数的 原码转补码 ==补码转原码,都是符号位不变,其他位取反再加1
特殊:
-128原码:10000000,很特殊的一个,从二进制数到原码没有进行改动
-128反码:11111111
-128补码:10000000
-128的原码和补码都相同
取值范围
- 对于有符号的1个字节,通常使用补码表示,1byte的取值范围:[-128,127],共有256个不同的整数
用补码表示就是[10000000,01111111]
五、计算机底层为什么采用补码
- 可以简化电路设计:采用补码可以将加减法转化为相同的操作,从而简化电路设计
- 解决了0的正负问题:在原码中,0有两个表示,+0和-0,这样会导致计算结果不唯一,而在补码中,0只有一种表示,即全0,可以避免这个问题
- 解决了负数溢出问题:在原码中,负数的表示范围比正数少1,这样在进行减法运算时容易出现负数溢出的情况,而在补码中,负数的表示范围与正数相同,可以避免负数溢出的问题
- 方便计算机进行运算,补码形式可以方便计算机进行加减法运算,而且可以使用相同的电路进行运算