C/C++题目--强制转换类型

题目:

int main()
{
int n=0xab65;//0xab65转换二进制为1010 1011 0110 0101 十进制为43877
char a=(char)n;
cout<<n<<endl;//43877
n=a;
cout<<n<<endl;//101 二进制为 0110 0101
         return 0;
}

【分析】

由于n的二进制为

1010 1011  0110 0101

因为char类型是占用1个字节。因此,在n的高端字节多余的部分剔除掉,保留低端与char类型占用字节大小的长度。即保留0110 0101,转换为十进制的结果就是101.

题目:

int main()
{
int n=256;//二进制为0000 0001  0000 0000
char a=(char)n;
cout<<n<<endl;//256
n=a;
cout<<n<<endl;//结果为0
         return 0;

}

 分析:由上题的规则可知,n强制转换之后二进制为0000 0000.即结果为0.

题目:

int main()
{
int n=128;//二进制为1000 0000
char a=(char)n;
cout<<n<<endl;//128
n=a;
cout<<n<<endl;//-128
return 0;
}

【解析】

由于128二进制为1000 0000中的1在char类型大小的最高位,即前面的所有位(即24位,一共有32位,由于char类型占用一个字节,除去8位)都置为1.如图所示:

由此可知,只要强制转换到某类型时,根据某类型的大小来保留其字节位数,再分析该字节位数的最高位是否是1,如果是1,该位数的前面所有位数都置为1.

题目:

int main()
{
int n=129;//1000 0001
char a=(char)n;
cout<<n<<endl;//129
n=a;
cout<<n<<endl;//-127
         return 0;
}

【解析】

对比上一题可知,该保留下来的字节位数的最高位如果是1,则就处于负数状态。当该保留字节中的数值越大,则结果也就是越大。例如130,结果为-126。以此类推,当达到1111 1111时,也就是255,其结果为-1。当达到256时,即1 0000 0000,由于保留位数为低端的一个字节,即0000 0000,则结果为0.

扫描二维码关注公众号,回复: 6494671 查看本文章

题目:

int main()
{
double n=-1;
int a=(int)n;
cout<<n<<endl;//-1
n=a;
cout<<n<<endl;//-1
         return 0;
}

【解析】

由于double是双精度浮点类型,是包含小数点的,当double含有小数时,强制转换成int型是最主要的作用。但对于浮点数类型,存储方式是比较复杂的。

枚举问题:
enum weekday{sun,mon,tue,wed=4,thu,fri,sat};

weekday workday =mon;

cout<<workday+web<<endl;//结果为5

【解析】

枚举成员默认第一个成员的值为0,接着第二个成员为1,下一个成员也就加1。若设置某成员的值,则这个成员的下一个成员的值为其前一个成员的值加1。

 

 

猜你喜欢

转载自blog.csdn.net/chen1083376511/article/details/92000450