C++ int和char类型的自动类型转换问题

代码如下#include<iostream>usingnamespacestd;intmain(){inta=256+69;charc;c=a;cout<<c<<endl... 代码如下
#include <iostream>
using namespace std;
int main()
{
int a=256+69;
char c;
c=a;
cout<<c<<endl;
return 0;
}
运行结果是 E,书上说是因为赋值时发生数据的截断,只将a的最低一个自己的数据赋给了c,高位字节被截断。为什么不是将a的值325赋值给c而是一个是表达式256+69赋值给c?同样的还有char ch;ch='a+b';cout<<ch;输出的是b……求高人指点。
展开
 我来答
ChanFord
2011-03-20 · 超过21用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:0
展开全部
你理解错了高位字节和低位字节。
首先a=256+69在编译之后编译器就预先计算了256+69为325,所以a=256+69和a=325是一样的;
325的二进制是:1 0100 0101 取低位字节(后位8)0100 0101=69 (E) ;所以 低位字节并不是说表达式的后面几个数,如果 表达式换成a=300+25 结果还是 E(69),而不是25;
在你的第二个问题中; ch='a+b' 语法是错的 单引号里面只能是一个字符,如果要给出字符串的话应该是:char *ch;ch="a+b"; ;如果你理解了上面的低位字节你不会有下面的疑问了
追问
那为什么 ch='a+b' 输出的是b呢?我试过ch='b+a' 输出的是a,也就是后面那一个
百度网友42e02c5
2011-03-20 · TA获得超过1231个赞
知道小有建树答主
回答量:506
采纳率:0%
帮助的人:533万
展开全部
int是16位的,即最大值是2^16-1=65536
char是8位的,即最大值是2^8-1=255
所以把int型数据赋值给char型的时候,就会出现数据溢出,所以它只把低8位赋值给了char型;
追问
为什么不是将a的值325赋值给c,而是一个是表达式256+69赋值给c?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
特柒佛下鞋1L
2011-03-20 · TA获得超过141个赞
知道答主
回答量:172
采纳率:0%
帮助的人:92.4万
展开全部
如果冒的话,数据会循环的。例如char为255,那么256的话就会变成0的那个值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
IDC_DAVID
2011-03-20
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
这问题有意思,坐等待解!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式