总结:小字节类型提升大字节类型,按小字节的符号位填充大字节的内存空间
描述的是将有符号整数从一个小尺寸的类型(char ,一字节)转换(提升)为一个大尺寸的类型(int , 四字节)时,为了保证数值不变,计算机会用原小类的最高位(符号位)来填充新开辟出来的所有高位字节
- 字节大小
- 小字节类型:指占用内存空间较小的数据类型 如char(一字节) short(两字节)
- 大字节类型:值占用内存空间较大的数据类型 如int(四字节) long(八字节)
- 符号位
- 在有符号整数中的二进制最高位,不表示数值,而是表示正负
- 符号位为0:表示正数
- 符号位为1: 表示负数
- 提升与填充
- 当需要将一个小字节的有符号整数放到一个大字节的空间时,比如将
signed char赋值给int- 保留原数值的二进制位(低位二进制数)
- 大空间中一般会在原二进制数的高位多出空位(1字节-4字节,多出24个空位)
- 空位值的填充 一般使用小类型的符号位作为值进行填充
- 如果符号位为正数(0),高位全部填充0
- 如果符号位为负数(1),高位全部填充1
- 目的
- 保持数值的十进制意义不变,对于使用补码表示的负数,用1填充高位是保持负数值正确的唯一方法
- 当需要将一个小字节的有符号整数放到一个大字节的空间时,比如将
提升一个正数
signed char c = 100; // 二进制: 01100100 (符号位是0)
int i = c; // 提升到 int
// 提升过程:
// 1. 保留低8位: 01100100
// 2. 高24位用符号位(0)填充: 00000000 00000000 00000000
// 最终 i 的32位二进制: 00000000 00000000 00000000 01100100
// 对应的十进制仍是 100。
提升一个负数
signed char c = -100; // 二进制(补码): 10011100 (符号位是1)
// 解释:10011100 是 -100 的8位补码表示。
int i = c; // 提升到 int
// 提升过程:
// 1. 保留低8位: 10011100
// 2. 高24位用符号位(1)填充: 11111111 11111111 11111111
// 最终 i 的32位二进制: 11111111 11111111 11111111 10011100
// 这正好是 -100 的32位补码表示,十进制值仍是 -100。
Comments NOTHING