无符号数和有符号数的转换
考虑下面一个程序:
float sum_elements(float a[],unsigned length){
int i;
float result =0;
for(i=0;i<=length-1;i++){
result +=a[i];
}
return result;
}
当length为0时,程序会出错。0-1这个式子会产生溢出,结果就是i<=Umax(无符号数最大值);0是unsined int,1是int,在运算时1会转化为unsigned int。结果得到-1(16位情况下,-1的补码表示为:0xFFFF),-1转化为unsigned就是无符号类型的最大值。