截断与扩展

位截断

在日常的编程中,经常会遇到类型转换,比如将short int 转为int,或者将int转为short int。我们知道将数据转为更大数据类型时,不会产生什么错误,但是将数据转为更小数据类型时,得到的结果会有很大差别。这就是位截断造成的。

这里我们声明两个数(int为32位,short为16位)
short的取值范围:-32768-32767 int的取值范围:-2147483648~2147483647

int n = 53193;       //n的二进制补码为00000000 00000000 11001111 11001001
short m = (short)n;  //m的二进制补码为11001111 11001001

m是shor类型,截断了n类型的低16位,m的值为-12343

位扩展

截断一个大数据类型会产生数据值的改变,小数据类型扩展成大数据类型不会改变值。
声明两个数(int为32位,short为16位)

short n = -12343;   //n的二进制补码为11001111 11001001
int m = (int)n;     //m的二进制补码为11111111 11111111 11001111 11001001(用1填充多出的位)

扩展为大数据类型时,多出的高位用原最高位的数字填充

short n = 12243   //n的二进制补码为00101111 11010011
int m = (int)n     //m的二进制补码为00000000 00000000 00101111 11010011(用0填充多出的位)

你可能感兴趣的:(截断与扩展)