#include <iostream>
using namespace std;
void main()
{
int a=0x7fff0001;
short b;
b=a;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
运行结果:
a=2147418113
b=1
请按任意键继续. . .
对于上面的赋值语句,首先了解一些规则:
一:数位多的往数位少的转化——截断
即只取低n位
正如上例——short 型 b 截取 int 型 a 的低16位
相当于
b=0x0001;//b=1;
二:数位少的往数位多的转化——位拓展
位拓展又分别符号拓展和零拓展
当b为带符号数时,无论a为带符号数还是无符号数,都是符号拓展
#include <iostream>
using namespace std;
void main()
{
int a;
unsigned int c;
short b=-1;
a=b;
c=b;
cout<<"a="<<a<<endl;
cout<<"(unsigned int)c="<<c<<endl;
cout<<"b="<<b<<endl;
}
运行结果:
a=-1
(unsigned int)c=4294967295
b=-1
请按任意键继续. . .
当b为无符号时,无论a为带符号数还是无符号数,都是零拓展
using namespace std;
void main()
{
int a;
unsigned int c;
unsigned short b=0xffff;
a=b;
c=b;
cout<<"a="<<a<<endl;
cout<<"(unsigned int)c="<<c<<endl;
cout<<"b="<<b<<endl;
}
执行结果:
a=65535
(unsigned int)c=65535
b=65535
请按任意键继续. . .