位截断
在日常的编程中,经常会遇到类型转换,比如将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填充多出的位)