数据类型转换的时候,经常会进行符号位的扩展:
假设将一个整数从单字节的数据类型(char)转换成双字节的数据类型(short):
1. 如果该数是正数,即符号位是0,比如0x05, 多出来的8位全部填符号位0, 转换后, 变成 0x0005, 十进制数值仍为5,没有改变;
2. 如果该数是负数,即符号位是1,比如 0x81, 多出来的8位全部填符号位1,转换后,变成0xff81, 根据下面2的补码的计算,转变前后十进制数值都是-127.
如果反向转换,比如从两个字节转换成一个字节表示,则是硬生生的把高位的8比特丢弃。