为什么Byte是8位,但是却只能表示到127,而不是255?(重要)

转载:https://www.jianshu.com/p/d0a8ff006f5c

第一个问题:我们都知道一个二进制8位能表示的最大值是 1111 1111 == 255,但为什么最大表示到127?

因为对于计算机来说,一个二进制的数字它的最高位是符号位,0表示正数,1表示负数。
所以 1111 1111 表示的 -127, 而 0111 1111 表示的是127,范围区间应该是[-127,127]之间。那么第二个问题来了

第二个问题:我们都知道一个Byte能表达的数字范围是[-128,127],那么这个-128是怎么来的呢?

这里面就涉及到计算机的原码、反码、和补码的相关知识了。

正数:

原码 == 反码 == 补码
即:原:0000 0001 ----- 反: 0000 0001 ------ 补:0000 0001

负数:

反码 == 原码的非符号位取反
补码 == 反码+1

即 原: 1000 0001 ------ 反: 1111 1110 ------ 补: 1111 1111

原码、反码、补码都可以表示同一个数字

计算机内部是用补码来存储一个数的

为什么要用补码来存呢?
既然规定了最高位是符号位,那么对于一个人来说正常的加减一个数(比如: 0010 1101 + 0111 1100, 0001 1011 - 1011 0011)可以把这个二进制转成带符号的十进制自然进行加减。
而对于计算机来说,同样需要识别符号位来判断是要加还是要减,也就这样势必会加大计算机的复杂性。因此希望符号位也可以参与到运算中,也就是 100 - 50 == 100 + (-50)。把减法也可以转化成加法。

这里举一个最简单的例子:

1-1 == 1+(-1) == 0
那如果是两个原码相加是什么样的
0000 0001
+
1000 0001
=
1000 0010 == -2 结果肯定是不正确的

那如果两个反码相加
0000 0001
+
1111 1110
=
1111 1111 转成原码 就是 1000 0000 == -0 负0
结果没有问题,但从数学的角度来说,一个整数包括负整数,0,正整数,而这里出现了负0,-0和0其实都表示0,但是这里从编码来说却出现了两个值, 1000 0000 和 0000 0000

最后看下两个补码相加
0000 0001
+
1111 1111
=
0000 0000 (超过8位的值被截掉) 转成原码 还是 0000 0000 =0,
可以看出,结果不仅正确,还同时解决了正负0的问题。
而对于补码的加运算来说,是不可能出现1000 0000的情况,因为两数相加想出现1000 0000的情况,就必然是两个正数相加(如 0000 0001 + 0111 1111 = 1000 0000),而两个正数相加是肯定不会出现负数的,所以1000 0000这个数肯定不会相加出现。

因此计算机规定,补码:1000 0000 就表示 -128

所以8位二进制数可表达的范围是[-2^7, 2^7-1]=[-128,127]
所以总结一下,补码不仅能正确的运算,同时还可以多表示一个最低位,所以计算机用补码来存储数字。

同理,16位,32位等等的其他二进制位的表示范围也就是[-2^15, 2^15-1], [-2^31, 2^31-1]



作者:想起个帅气的头像
链接:https://www.jianshu.com/p/d0a8ff006f5c
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

<think>嗯,用户问的是“byte是什么意思”,我需要先回想一下byte的基本定义。首先,byte是计算机科学中的基本单,通常用来表示存储容量或数据大小。然后,记得1 byte等于8 bits,这一点很重要,不过可能有些早期的系统用不同的数,但现在普遍都是8了。接着要解释bit和byte的关系,bit是最小单只能是0或1,而byte8个bit组成,能表示更多的值,比如0到255。 接下来应该举一些例子,比如常见的存储单,比如KB、MB、GB这些,说明它们和byte的换算关系,比如1KB是1024 bytes,这样用户能更直观理解。同时,可能还需要提到byte在现实中的应用,比如文件大小、内存容量等,比如一张图片可能是几MB,硬盘可能是几百GB或者几TB。 可能用户对为什么8 bits组成一个byte有疑问,这里需要补充历史背景,比如早期系统设计时8 bits足够表示常用字符,比如ASCII码有128或256个字符,刚好一个byte可以覆盖。另外,现代计算机架构中,byte作为基本寻址单的重要性,比如内存地址通常以byte为单寻址。 还要注意区分byte和bit的缩写,通常byte是大写的B,而bit是小写的b,比如下载速度是Mbps(兆比特每秒),而文件大小是MB(兆字节),避免混淆。可能用户在实际应用中会遇到这种区别,比如网络带宽和存储容量的不同单。 另外,考虑用户可能的实际应用场景,比如编程时处理字节数据,或者了解存储设备容量,所以需要从不同角度解释byte的作用。可能还需要提到编码方式,比如UTF-8中使用多个bytes表示字符,特别是非拉丁语系的字符,这样byte在处理多语言文本时的作用。 需要检查是否有常见的误解,比如有人可能以为1KB是1000 bytes,但实际上因为二进制的原因,是1024,不过现在有些场合也可能用十进制来解释,比如硬盘厂商常用十进制单,这时候可能需要提到两种标准(IEC和SI)的不同,比如KiB和KB的区别,但用户可能不需要太深入,所以简单带过即可。 最后,总结byte的重要性,作为计算机数据处理和存储的基础单,几乎所有的软件和硬件都基于byte进行操作,确保用户理解其核心地。同时,语言要尽量通俗易懂,避免过多专业术语,让不同知识背景的用户都能明白。</think>好的!以下是关于 **byte(字节)** 的通俗解释: --- ### 1. **基本定义** - **Byte(字节)** 是计算机中存储和处理数据的基本单,类似于日常生活中“米”是长度单、“升”是体积单。 - **1字节 = 8二进制(8 bits)**,即由 8 个 `0` 或 `1` 组成(例如 `01000001` 表示字母 `A`)。 --- ### 2. **为什么需要字节?** - **二进制的最小单是 bit()**,但单独 1 bit 能表示的信息太少(只有 `0` 或 `1`)。 - **字节(8 bits)** 可以组合出 $2^8 = 256$ 种不同的值,足以表示: - **英文字符**(如 ASCII 编码) - **小范围的数字**(0~255) - **颜色、指令等基础数据**。 --- ### 3. **常见用途** - **存储容量**:文件大小、硬盘容量均以字节为单。 - 例如:1 KB = 1024 字节,1 MB = 1024 KB,1 GB = 1024 MB。 - **内存管理**:计算机内存按字节划分地址。 - **数据传输**:网络速度常用比特(bit)表示,但文件下载时需转换为字节(1 Byte = 8 bits)。 --- ### 4. **扩展知识** - **字符编码**:不同语言可能需要多个字节表示一个字符(例如中文 UTF-8 编码用 3 字节)。 - **编程中的字节**:在代码中操作字节可直接控制数据底层(例如图片处理、加密算法)。 --- ### 5. **示例** - 单词 `Hello` 占 **5 字节**(每个字母 1 字节)。 - 一张 1MB 的图片 ≈ **1,048,576 字节**。 - 1 部高清电影 ≈ **1~5 GB**(即约 10 亿到 50 亿字节)。 --- 简单总结:**字节是计算机世界的“原子”**,所有数据(文字、图片、视频)最终都由字节构成。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值