1:当把一个整数值赋给浮点数时,小数部分记为0,。如果该整数所占的空间超过了浮点类型的容量,精度可能有损失。
2:当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数总数的余数。
3:当我们赋给带符号类型一个超过它的表示范围的值时,结果是未定义的,此时,程序可能继续工作,可能崩溃,也可能生成垃圾数据。
当一个算数表达式中既有无符号数又有int值时,那个int值会转换成无符号数。把int转换成无符号数的过程和把int的值赋给unsigned类型一样,参见2。
unsigned 范围是2^32=4294967296
#include<iostream>
using namespace std;
int main()
{
int i=-6;
unsigned u=10;
cout<<i+i<<endl;
cout<<u+i;
return 0;
}
运行结果为-12和4。
#include<iostream>
using namespace std;
int main()
{
int i=-42;
unsigned u=10;
cout<<i+i<<endl;
cout<<u+i;
return 0;
}
运行结果为-84和4294967264。
根据运算我发现,当i的值大于-10时,可以正确得出结果。(cfree中)
#include<iostream>
using namespace std;
int main()
{
unsigned i=10,u=9;
cout<<u-i<<endl;
cout<<i-u;
return 0;
}
结果为4294967295和1。所以两个无符号数运算结果依然是无符号数。
#include<iostream>
using namespace std;
int main()
{
for(unsigned i=10;i>=0;i--)
cout<<i<<endl;
return 0;
}
死循环,因为i>=0,所以当i=-1时跳出循环,但是i无符号-1会转化为-1对4294967264取摸,结果为4294967265。所以不会跳出循环。
总结:一个表达式里既有带符号变量又有无符号变量时,带符号变量会自动转化为无符号变量。