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

本文通过一系列题目探讨了C/C++中强制类型转换的原理和规则,包括从整数到char类型的转换,高位字节的处理,以及转换可能导致的正负数变化。同时,文章还介绍了枚举类型的使用,讲解了枚举成员的值如何自动递增。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

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.

题目:

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。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值